채점 계약
Lua 문제도 보통 solve(input) 형태로 문자열을 받아 문자열을 반환합니다 (환경 설명 따름).
function solve(input)
local a, b = input:match("(%S+)%s+(%S+)")
return tostring(tonumber(a) + tonumber(b))
end
값과 nil
nil은 값이 없음입니다. false와 nil만 falsy이고, 0과 ''는 truthy입니다 (JS와 다름).
테이블
배열과 맵이 모두 테이블입니다. 배열 인덱스는 1부터입니다.
local arr = {10, 20, 30}
print(arr[1]) -- 10
local map = {a = 1, b = 2}
print(map.a)
map['c'] = 3
길이 연산자 #arr는 구멍(nil 구멍)이 있으면 예상과 다를 수 있습니다.
문자열
local s = input:gsub("^%s+", ""):gsub("%s+$", "")
local parts = {}
for token in string.gmatch(s, "%S+") do
parts[#parts + 1] = token
end
.. 가 문자열 연결입니다. +는 숫자용.
비교
== / ~= (같지 않음). !=가 아닙니다.
왜 1-based인가
Lua 배열부 전통입니다. for i = 1, #t가 자연스럽습니다.
JS/Python 코드를 옮길 때 i-1 실수를 가장 많이 합니다.
문자열 패턴
for w in input:gmatch("%S+") do
-- 단어
end
%s 공백, %d 숫자, . 任意 한 글자 (정규식과 비슷한 패턴).
table.concat으로 출력
return table.concat(parts, "\n")