【语法】
一、隐蔽陷阱
猜数字游戏给"A 位数字正确且位置对,B 位存在但位置错"的提示:B 直接按字符比对会把同位命中的数字再算一遍,提示虚高误导猜题人。
二、底层原理
A 一趟同位比对即得。B 要先剔除 A 命中的位,把两侧剩余数字各自计数,再对每个数字取两侧计数的较小者求和——同数字多猜少有时只按少的算,重复虚报被计数表拦住。
三、正确代码
基础写法(A 命中数):
local function bulls(secret, guess)
local a = 0
for i = 1, #secret do
if secret:sub(i, i) == guess:sub(i, i) then
a = a + 1
end
end
return a
end
进阶写法(A 与 B 全算):
local function hint(secret, guess)
local a, sc, gc = 0, {}, {}
for i = 1, #secret do
local s, g = secret:sub(i, i), guess:sub(i, i)
if s == g then a = a + 1
else
sc[s] = (sc[s] or 0) + 1
gc[g] = (gc[g] or 0) + 1
end
end
local b = 0
for k in pairs(sc) do
b = b + math.min(sc[k], gc[k] or 0)
end
return a, b
end
local p = getplayerbyname("guess01")
local a, b = hint("1807", "7810")
sendmsg(p, 1, a .. "A" .. b .. "B")
四、引擎验证
答案 1807 猜 7810 输出 1A3B;重复数字猜 1123 对 0111 输出 1A1B,重复虚报被计数表拦住。
五、FAQ
问:B 为何取较小者?
答:同数字多猜少有只按少的算。
问:位数固定吗?
答:任意长度逻辑不变。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
【语法算法】 一、一个不报错的偏移 点击地图走路,人物落点总是往右下偏半格;技能点地释放,特效又偏左上小半格。控制台干干净净…
【语法算法】 一、一行代码拆解 pos = pos + (target - pos) math.min(1, k dt) —…
【游戏功能】 一、一次被黑暗淹没的上线 夜间版本上线当晚,客服工单一半是"地图全黑看不见路",另一半是"火把一多就卡成幻灯片…
【游戏功能】 一、先抛一个坑 为什么世界BOSS的血条会一段一段换颜色?打空一段才掉下一段,最后一段永远是红色?如果只是把总…
【游戏功能】 一、一次本可避免的差评 PC 版上线第六天,应用商店冒出一条一星评论:"背包都不能滚轮翻,什么年代了。"复现一…
【游戏功能】 一、先抛一个坑 同样挂一层状态,为什么中毒的怪照跑不误、冰冻的怪却像被拔了电源?再进一步:冰冻到点的瞬间,怪为…