-- 題目1:-- 給定表 t = {"apple", "banana", "apple", "orange", "banana", "apple"}
-- 寫一個函數 countFreq(tbl) 返回一個新表,統計每個元素出現次數
-- 例如:返回 {apple=3, banana=2, orange=1}
local function countFreq(tbl)local result = {}for _, v in pairs(tbl) doresult[v] = (result[v] or 0) + 1endreturn result end-- 測試題目1 local t1 = {"apple", "banana", "apple", "orange", "banana", "apple"} local freq = countFreq(t1) print("題目1結果:") for key, value in pairs(freq) doprint(key .. ": " .. value) end print()
-- 題目 2:合并表
-- 給定兩個表 t1 = {1,2,3} 和 t2 = {4,5,6}
-- 寫一個函數 mergeTable(t1, t2) 返回一個合并后的表 {1,2,3,4,5,6}
local function mergeTable(t1, t2)local result = {}-- 復制t1的元素for i, v in ipairs(t1) doresult[i] = vend-- 添加t2的元素for i, v in ipairs(t2) dotable.insert(result, v)endreturn result end-- 測試題目2 local table1 = {1,2,3} local table2 = {4,5,6} local merged = mergeTable(table1, table2) print("題目2結果:") for i, v in ipairs(merged) doprint(i .. ": " .. v) end print()
-- 題目3:惰性計數器
-- 寫一個函數 makeCounter(start)
-- 返回一個函數,每次調用返回計數器的下一個值
-- 例如:
-- c = makeCounter(10)
-- print(c()) --> 11
-- print(c()) --> 12
local function makeCounter(start)if type(start) ~= "number" thenerror("起始值必須是數字")endlocal count = startreturn function()count = count + 1return countend end-- 測試題目3 print("題目3結果:") local c = makeCounter(10) print("第一次調用:", c()) --> 11 print("第二次調用:", c()) --> 12 print("第三次調用:", c()) --> 13 print()
-- 題目 4:高階函數 map
-- 寫一個函數 map(tbl, func)
-- 返回一個新表,每個元素是 func(原元素) 的返回值
-- 例如:map({1,2,3}, function(x) return x^2 end) 返回 {1,4,9}
local function map(tbl, func)local result = {}for i, v in ipairs(tbl) doresult[i] = func(v)endreturn result end-- 測試題目4 print("題目4結果:") local numbers = {1, 2, 3} local squares = map(numbers, function(x) return x^2 end) for i, v in ipairs(squares) doprint(i .. ": " .. v) end print()
-- 題目5:提取數字
-- 寫一個函數 extractNumbers(str)
-- 輸入:"a1b23c456"
-- 輸出表 {1,23,456}
local function extractNumbers(str)local result = {}for num in str:gmatch("%d+") do -- gmatch會找到所有匹配的數字table.insert(result, tonumber(num))endreturn result end-- 測試題目5 print("題目5結果:") local numbers = extractNumbers("a1b23c456") for i, v in ipairs(numbers) doprint(i .. ": " .. v) end print()
-- 題目6:郵箱驗證
-- 寫一個函數 isEmail(str)
-- 如果 str 是郵箱格式(xxx@yyy.zzz)返回 true,否則 false
-- 使用 Lua 模式匹配
local function isEmail(str)if type(str) ~= "string" thenreturn falseend-- 更合理的郵箱模式:至少一個字符@至少一個字符.至少一個字符local pattern = "^[%w%.%-_]+@[%w%.%-]+%.%w+$"return str:match(pattern) ~= nil end-- 測試題目6 print("題目6結果:") print("test@example.com:", isEmail("test@example.com")) print("invalid.email:", isEmail("invalid.email")) print("user@domain.co.uk:", isEmail("user@domain.co.uk")) print()
-- 題目 7:學生成績表
-- 有學生表 students = {
-- ? ?{name="Tom", score={math=90, english=85}},
-- ? ?{name="Lucy", score={math=95, english=92}},
-- ? ?{name="Jack", score={math=85, english=88}}
-- }
-- 寫函數 averageMath(students) 返回數學平均分
local function averageMath(students)local sum = 0local count = 0for _, student in ipairs(students) dosum = sum + student.score.mathcount = count + 1endreturn sum / count end-- 測試題目7 print("題目7結果:") local students = {{name="Tom", score={math=90, english=85}},{name="Lucy", score={math=95, english=92}},{name="Jack", score={math=85, english=88}} } print("數學平均分:", averageMath(students)) print()
-- 題目 8:去重并排序
-- 給定表 t = {5,2,7,2,3,5,8,1}
-- 寫一個函數 uniqueSort(tbl)
-- 返回一個新表,內容去重并從小到大排序 {1,2,3,5,7,8}
local function uniqueSort(tbl)if type(tbl) ~= "table" then -- 這里原來寫錯了print("輸入錯誤")return nilend-- 用哈希表去重local seen = {}local unique = {}for _, v in ipairs(tbl) doif not seen[v] thenseen[v] = truetable.insert(unique, v)endend-- 排序table.sort(unique)return unique end-- 測試題目8 print("題目8結果:") local testArray = {5,2,7,2,3,5,8,1} local result = uniqueSort(testArray) for i, v in ipairs(result) doprint(i .. ": " .. v) end print()
-- 題目 9:嵌套表深度求和
-- 給定表 t = {1, {2, 3}, {4, {5, 6}}}
-- 寫函數 sumNested(tbl) 返回所有數字的和 1+2+3+4+5+6 = 21
local function sumNested(tbl)if type(tbl) ~= "table" thenreturn 0 -- 返回0而不是nil更好endlocal sum = 0for _, value in ipairs(tbl) doif type(value) == "number" thensum = sum + valueelseif type(value) == "table" thensum = sum + sumNested(value)endendreturn sum end-- 測試題目9 print("題目9結果:") local nestedTable = {1, {2, 3}, {4, {5, 6}}} print("嵌套表總和:", sumNested(nestedTable))