7 kyu:Circle cipher
這題我的寫法是:
local kata = {}
function kata.encode(s)
local a, j = {}, 1
for i = 1, (#s + 1) /2 do
a[j] = string.sub(s, i, i)
j = j + 2
end
j = 2
for i = #s, #s/2 + 1, -1 do
a[j] = string.sub(s, i, i)
j = j + 2
end
return table.concat(a, "")
end
function kata.decode(s)
local a, i = {}, 1
for j = 1, #s, 2 do
a[i] = string.sub(s, j, j)
i = i + 1
end
i = #s
for j = 2, #s, 2 do
a[i] = string.sub(s, j, j)
i = i - 1
end
return table.concat(a, "")
end
return kata
其中function kata.encode(s)
我想了很久,經過不斷try and error,
終於成功了,
不過function kata.decode(s)
終於成功了,
不過function kata.decode(s)
就機乎不用想,很直覺就寫出來了。
因此我看了一下,別人function kata.encode(s)的寫法,
發現別人寫的比較直覺如下:
因此我看了一下,別人function kata.encode(s)的寫法,
發現別人寫的比較直覺如下:
function kata.encode(s)
local res = ""
while #s > 0 do
-- use first char
res = res .. s:sub(1,1)
s = s:sub(2)
if #s > 0 then
-- use last char
res = res .. s:sub(-1)
s = s:sub(1,-2)
end
end
return res
end
語法說明:
s:sub(2)是返回第1個以外的字串,相當於s:sub(2, #s)
s:sub(2)是返回第1個以外的字串,相當於s:sub(2, #s)
s:sub(-1)是返回最後一個字元
另外s:sub(-2)是返回倒數第2個字元和倒數第1個字元,所成的字串
s:sub(1, -2)是返回除了最後一個字元以外的字串
沒有留言:
張貼留言