Code Break 攻略:10 次机会内破译 4 位密码(2026)
亲自试试 — 立即玩 Code Break
浏览器免费直玩,无需下载或注册。
js/main.js(Playnesta 原创,MIT)里的常数,本场用无头 harness 走按钮同一条代码路径逐条核对——不是转引第三方。已核对常数:密码是4 位数字,首位可以是 0,数字可以重复;一局给你 10 次机会;每次猜测后返回 bulls(数字对且位置也对)与 cows(数字对但位置不对),而且密码里的同一个数字最多只被计一次(猜 3311 对 1233 是 0 bulls 3 cows,不是 4);第 10 次猜错即终局并亮出密码;不足 4 位的猜测会被拒绝;输入区最多容纳 4 位;密码在终局前一直隐藏。本场在生产构建上实测:抽取结果可以以 0 开头(2,000 次抽样中 190 次),且接近一半的密码会重复某个数字(2,000 次中 964 次)。下文是策略;操作说明游戏页已覆盖。1. 第一手用四个不同的数字
开局那一手要用四个互不相同的数字——0123、1478 都行。原因就在判分规则本身:密码里的同一个数字最多只被计一次,所以用四个不同数字做的探测,答案是没有歧义的。每个 bull 精确指出某个数字就坐在那个位置,每个 cow 指出某个数字在密码里但换了个位置,两者绝不会混淆。在 500 个随机密码上实测:用 0123 猜测时,返回的 bulls 加 cows 始终等于这四个数字里真正出现在密码中的个数,零例外。
四个不同数字的探测还顺带解决首位问题。如果开局用 0123 而第一位返回 0 bulls,那么 0 要么根本不在密码里,要么不在首位,剩下的计数会告诉你是哪一种。
2. 0 bulls 0 cows 是最强的一次排除
一次猜测什么都没返回,说明它的数字一个都不在密码里。harness 看到的每一个零结果都印证了这点:500 次随机探测里有 63 次返回 0 bulls 0 cows,这 63 次里探测的四个数字没有一个出现在密码中。用四个不同数字,一次猜测就能从候选池里划掉四个数字,这是收缩候选最快的路径。
早一点去找这个信号。一个什么都没返回的 0000 已经证明 0 不在密码里,而它只花掉十次机会中的一次。反过来,返回 bulls 和 cows 的猜测只告诉了你某个数字在哪个位置。
3. cow 点名的是数字,不是位置
cow 只意味着一件事:这个数字在密码里,而且不在你猜的那个位置。实测例子很干净——用 0011 猜 1234 得到 0 bulls 1 cow,说明数字 1 在密码里,但不在第四位。cow 不会告诉你的是这个数字有几份,因为大约一半的密码会重复某个数字(见第 6 节)。
把信息分成两栏记:已经确定在密码里的数字集合,以及还开着的位置集合。cow 填满第一栏,同时清掉第二栏的一个格子。两栏都变短时,你就快有答案了,第 5 节讲怎么花掉剩下的机会。
4. 探测时不要重复数字
让这款游戏有意思的那条规则,同时也让重复探测变得没用。猜 1111 对密码 1212 得到 2 bulls 0 cows:多出来的两个 1 一分不得,因为密码里的数字最多只被计一次。重复探测永远没法告诉你密码里有三个 1,而它照样吃掉你十次机会中的一次。
重复数字属于最终答案——那时你已经知道是哪个数字,只是在试它该放哪。探测阶段它没有位置。
5. 把十次机会分成两个阶段
第一阶段,探测。 用不同数字的猜测弄清楚哪些数字在密码里。四个位置、每位十个数字、每个位置都独立地从这十个数字里抽取(本场实测:2,000 多次抽取中每个位置都产出过全部十个数字),那么可能的密码有 10,000 个,而一次猜测只返回一个 bulls 与 cows 的组合。盲猜追不上这个规模,信息可以。
第二阶段,锁定。 数字集合确定之后,开始把已确认的数字放进候选位置。每次返回 bull 的猜测会钉死那个位置,每次返回 cow 的猜测会把那个数字挪到别的空位。有两个习惯能守住预算:不要重复已经猜过的组合——构建会接受它、把它记进历史、并照样从十次里扣,而它按同一条规则重新算出的计数不会给你任何新信息;把最后一次机会留给你最好的完整答案,因为第 10 次猜错一落地这局就结束了。
6. 为重复数字和首位 0 做准备
两个实测事实会改变你的探测方式。接近一半的密码会重复某个数字:2,000 次抽样中有 964 次,占 48%。所以永远不要认定某个数字只出现一次——cow 留给你的正是份数未定,而第二份往往就是眼看要成的猜测功亏一篑的原因。
密码也可能以 0 开头:2,000 次抽样中有 190 次,约 9.5%。心里那个"首位是 1 到 9"的模型大约十次里错一次,而它一旦错就赔上整局。把 0 放进第一格的探测能顺手把这个情况覆盖掉。
7. 用 ?code= 与 ?seed= 练固定题
构建支持两个 URL 参数,两个都在线上游戏里实测过。?code=0421 会钉死那个确切密码——构建接受任意四位值,包括以 0 开头的,而 0421 是合法密码。?seed=playnesta 会一遍遍重放同一个随机密码:同一个种子两次加载都得到 1312,换一个种子则得到 6816。无效的 ?code=12 会被忽略,这一局回落到随机抽取。
把它们当练习工具用。钉一个带重复数字的密码(?code=1122)来练"第二份该放哪"这个问题;重跑一次你没解开的种子,看看第一次是不是把计数读错了。本局还会把胜、负、连胜与最佳连胜记在这个浏览器里,并且不公布任何平均通关时间、也不与别的玩家比较——所以没有榜可追,只有眼前这个密码。
FAQ
这和游戏页上的规则有什么不同?
游戏页讲的是怎么操作:输入或点按四位数字再提交,在历史列表里读上一手的 bulls 与 cows 计数,用退格与回车,看右上角的计数条,以及给 URL 加上 ?code= 或 ?seed=。本指南假定你已会这些,讲的是上一层:第一手探测该发什么、一次零结果怎么读、cow 告诉你什么又不告诉你、什么时候开始锁定位置,以及如何用十次机会去对付 10,000 个可能的密码。先在页面读规则,再在这里练策略。
"0 bulls 1 cow" 到底告诉你什么?
告诉你那个数字在密码里、但不在你猜的位置,仅此而已。它不会告诉你另外三个位置里哪一个装着它,也不会告诉你密码里有一份还是两份这个数字。实测例子是 0011 对 1234:数字 1 在密码里,只是不在第四位。
为什么猜 1111 对 1212 只有 2 bulls?
因为密码里的同一个数字最多只被计一次。第一位和第三位的 1 是 bulls;你猜测里另外两个 1 在密码里找不到还没配上的 1,于是不得分。这和 3311 对 1233 得到 3 cows 而不是 4 是同一条规则。
有办法知道一个密码该用几次猜吗?
没有,而且这个构建也不假装有。没有 par、没有提示按钮、没有难度档:密码是随机抽的,一局就是十次机会,页面只把你自己的胜、负、连胜存在这个浏览器里。它不公布任何平均通关时间,所以你在别处读到的"大多数人五次就破译"这类数字,这页给不了依据。这页能给的是第 7 节那两个练习参数。
密码能以 0 开头吗?数字能重复吗?
两样都行,而且两样都在生产构建上实测过:2,000 次抽样中 190 次以 0 开头,964 次重复了某个数字。构建自带的 ?code=0421 也直接证明首位 0 是合法密码。
第 10 次猜错会怎样?
这一局结束,密码亮出来,游戏不再接受输入——之后的按键不会有任何反应。历史里仍保留全部十次猜测和它们的计数,所以第 10 手是最值得复盘的一手。
在哪里玩?
就在本站 Code Break 页面。"十次之内猜中 4 位密码、每次猜完读 bulls 与 cows"这个玩法没有单一作者,因此本构建由 Playnesta 从零编写,未复用任何游戏文件字节:引擎(js/main.js:splitmix32 种子抽取、密码里每个数字最多计一次的 bulls/cows 规则、十次机会的一局、猜测历史、屏显数字键盘与规则弹窗)、样式表、埋点桥与触控垫片全部为 Playnesta 原创(MIT,见包内 LICENSE.txt)。选型时最接近的上游项目 maxwellito/breaklock @ 8dedd3b(MIT)只作机制参照——不复制任何字节,也不再分发其许可下的任何文件;它的 webpack 与 babel 构建链也远比这个外壳能承受的重。这个玩法源自的经典四位数破译桌游使用的是注册商标名,该名称在这里只作标签与检索词出现,绝不作为游戏名、slug 或标题。Playnesta Games 是该网页实现的开发者与发布者。