<aside> 💡 本篇文章来自我的一次团队内技术分享,内容略有删改。

</aside>

入门数独:你已经知道的那些事

数独的基本规则大家应该都了解,有一个比较大的误区是数独和幻方容易产生混淆。数独和幻方就跟 Java 和 JavaScript 的关系一样,只能说毫无关联。数独并没有要求哪些数字加起来等于多少,对斜线方向也没有任何要求。

数独是一个 9x9 的方阵,被分割成 9 个 3x3 的宫,要求填入 1-9 九个数字,每个数字在每一行、每一列、每一宫中都只出现一次。

2FDDD051-99B7-4112-96C6-C48C02BEB9F0.png

数独游戏中,程序会自动生成好满足数独规则的局面,然后抠掉其中的一部分数字让玩家填写。一些比较优秀的数独游戏在生成时,会保证抠掉的数字都可以通过一步步的逻辑推理填回去,而不需要靠猜。

不幸的是,手机端的数独游戏虽然层出不穷,但满足高级玩家需求的几乎没几个。以下是我用过的几款数独软件的主要功能,列出的都是我认为比较实用或者适合高级玩家的功能。在这篇文章中,我们推荐用 iOS 端的 Good Sudoku,它可能是数独游戏软件中的天花板级别。安卓目前还没有能与之匹敌的数独软件,我有点想自己写,但是精力和能力有限。

软件 Good Sudoku Sudoku Extreme Sudoku.com Sudoku - The Clean One
平台 iOS iOS iOS/Android/Web Android
Logical solution
Only solution
Strategy-based difficulty
Auto-noting
Auto-denoting
Strategy hint
Mistake check
Eternal mode
Daily challenge
Scan and play
Tutorials

笔记:高级玩家必备工具

数独的规则十分简单,只要知道唯一性原则,就可以正式开始挑战了。在做了一些简单或中等难度的数独之后,你应该已经学会两个最基本的策略:Naked Single 和 Hidden Single。

<aside> 💡 **Naked Single:**当考虑某一行/列/宫中某格子可能的取值时,该格子只有一个数字可以填,那么这个格子必然是这个数字。

</aside>

<aside> 💡 **Hidden Single:**当考虑某一行/列/宫中某数字可能的位置时,该数字只有一个格子可以填,那么这个数字必然填入这个格子。

</aside>

在初期,你会发现自己每次都需要遍历相关的格子或数字,才能找到一个 Naked Single 或 Hidden Single,而且在填入这个数字之后,这个数字其实给所在的行/列/宫又带来了新的线索,但这些线索没有被记录下来,导致又要重新寻找。因此,为了快速解决数独,我们必须首先引入笔记(Noting)作为我们必备的法宝。

上面两张图就是合法的笔记,在每一个未解决的格子当中,把所有可能的情况标示出来。考虑一下 Hidden Single 的定义,我们不难发现,为了找到 Hidden Single 这一类的线索,我们需要把所有格子的所有可能性都填好,不能有遗漏,否则会给我们造成误判。

之所以叫 Naked 和 Hidden,是因为在做好笔记的状态下,Naked 会非常明显展示出格子只有这一种情况,而 Hidden 则不太明显,因为这一个格子中有很多种可能的数字,尽管其中一个数字只能在这个格子出现,也还是需要肉眼遍历整块区域才能发现。

<aside> ⚠️ 数独的策略并没有固定的名称,在一些教程中,Naked 可能称作 Obvious 或者类似的词。

</aside>

Good Sudoku 提供了 Auto-noting 和 Auto-denoting 的功能,可以在开局时自动生成所有笔记,同时在确定每个数字的过程中,从影响到的格子中清理掉对应的笔记。