2025年10月7日 星期二

Lua, 7 kyu:Circle cipher

 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.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(-1)是返回最後一個字元
另外s:sub(-2)是返回倒數第2個字元和倒數第1個字元,所成的字串
s:sub(1, -2)是返回除了最後一個字元以外的字串

沒有留言:

張貼留言

Lua的table,不能直接比較

 今天在寫 7 kyu: [BUG] XCOM-388: Mass spectrometer crashes 這一題時, 發現empty table的變數跟empty table的值用不相等比較時, 預期會是false (非不相等),但其實會傳回true, 如下: > a ...