第 48 讲:袋鼠
袋鼠(Unknown Cover/Kangaroo),原称为代数法,指的是假设某个单元格填入的未知数来获取一定填数逻辑的技巧。袋鼠和代数谐音,所以也称为袋鼠。但由于Algebra(代数)一词跟这里的代数的使用不太相似,所以没有启用这个名称,所以本文档采用谐音叫法,即袋鼠。
不过,袋鼠这种技巧更像是一种解题视角,因为做题过程之中我们会通过这种独特的视角看到我们平时完全看不到的东西。
Part 1 先来看看一般化的版本
1-1 辅助数类型

如图所示,我们优先假设r5c5 = a,然后分别假设r1c5和r3c5为x和y,就可以发现,x不包含候选数9,而对应地,a和y里必须有一个数字是9。所以,r3c8不含数字9,而且r3缺少的数字和c5缺少的数字完全一样,这就说明了r3c3只能是含有数字9的a,而r3c8只能是没有9的x。我们得到了r3c3 = r5c5 = a之后,可以进一步使用c1的排除,得到r9c1 = a。

接着,我们得到r9c1是a后,我们继续对b8执行假设。假设r9c6 = b,则根据b7的宫排除,得到r78c2里必须要有一个b,就相当于形成了一个以未知数形式呈现的区块结构。
由于r2c2只有2、8、9,而既然r2c2不能是a,也不能是b,那我们只好假设r2c2填的是c。此时我们就确定了a、b、c是2、8、9的数字,互不相同,这样一来也顺便得到了r2c1 = b、r5c1 = c。
接着我们观察r5,此时可以发现,b只能放在r5c9,而r5一共有2、4、8、9四种数字没填,其中a、b、c也都已经被我们填入到盘面里,所以只能r5c6 = 4。
可以看到,这个示例里,我们借助了功能不大的辅助数,来得到r9c1 = a的结果后,继续向下推导,并得到最终的结果。
这就叫做袋鼠,利用假设未知数的形式来代入试填,并得到结论的方式。这个例子还能继续往下通过袋鼠标注全盘,进而得到a、b、c的具体数值结果,这里就不讲了,你可以尝试继续做下去。在完成后就会发现,实际上这里辅助的x和y也是有用处的,只是此处得到结论后我们没有继续往下做了,所以看起来没有什么用途。
接着我们来看第二种用法。
1-2 数组类型

如图所示,假设r2c2 = a(a是3、9之一),则显然r2c56里只能是6和9,鉴于例子用不上6作为假设,我们就不假设为未知数了,那么r2c56只能填入6或9。于是r1c4 = a、r7c4 = b。

接着,我们以r2c2 = a向下推理。由于排除操作,我们最终确定a只能放在b7里的r9c13里。接着使用排除,得到b8此时只能把a放在r7c5里(r7c4是上一轮推导得到的b,显然a和b不能填入一样的数字)。
那么观察b8,已经出现a和b了,而a和b又是3和9,所以r7c45是3、9的数对结构,故只有r9c6 = 6了。
这一则示例也是比较精彩的,它破解了一些需要链的棘手情况。
1-3 确定值类型

如图所示,假设r1c2 = a,并假设r7c2 = b、c9c2 = c(此时a、b、c是1、4、7,且互不相同)。于是,我们根据排除可以得到b7里a的位置在r8c3;同理,r2上填a的位置也可以确定,在r2c6。接着,由于a是1和7的其一(不能是4),而r9恰好缺少1、4、7,且此时已经r9c2 = c了,那么只能把可以是4的b放在r9c9,所以r9c5 = a。而且,由于r7c2 = b、r9c5 = a,所以它们的交集r7c6就只可以是c了,且r8c4 = b。

接着,观察b2。由于r8c4(b)对b2的排除,就会发现b2里没有位置可以填下b了。那岂不是做错了?没有。回想一下,a、b、c是1、4、7,而4还有一个确定值位于b2里,那就是r3c5。既然b放不到这些空格上,那么这个4就必须是b的数值结果了,也就是b = 4。否则b将没有位置放,出现矛盾。所以,我们就确定了b = 4的结论,刚才假设的所有位置,只要是b的地方,都可以被替换为4,即r7c2 = r8c4 = r9c9 = b = 4(r9c9因为在推理里用不上,所以没有标注)。
可以看到这一则示例用法更为灵活,它直接把填数的结果给替换成了真实的数值。
1-4 什么?直观?
可以看到,前面的示例除了简单枚举一下单元格的填数情况以外,基本上就用不上候选数了,所以这个技巧基本上都用不着候选数。而实际上,这个技巧本来也就是为了直观而生的,一般来说,这个技巧都使用直观视角解题;当然,有些时候可以配合候选数全标形式来辅助数数操作。
而且可以发现,这些盘面存在一定的共性:只要是涉及三到四种数字在盘面里确定值比较少的,或者说候选数比较多的,我们就可以尝试使用袋鼠,因为这类型的题目使用袋鼠总能得到我们想要的结果,毕竟这些数字之间的提示信息比较多,但我们在实际做题过程之中,使用的之前的技巧并没有真正用到它们。
Part 2 常见技巧的袋鼠视角
在数独里,有一些技巧依然可以使用袋鼠的视角进行观察和理解,而这种理解思维比起普通版的话,要更新颖一些。而且在上一节里,我们说到了,袋鼠一般可以用于直观层面,所以我们下面的示例都不标注候选数,你可以尝试来理解和感受一下,直观的袋鼠到底是什么样的。
2-1 欠一数对

如图所示。假设r9c1 = a,则通过唯余操作,得到a是{39}之一(即a是3和9的其一)。对b4进行排除,由于r6上有3和9的确定值,所以不管a是多少,最终a只能填到r5c2。而由于a是3和9的其一,所以观察r5可以发现填入2的位置只剩下r5c6,故r5c6 = 2。
如果你打开软件的候选数开关,查看全盘的全标候选数的话,你就会发现,这就是一个完美的、正常的欠一数对。所以,它是欠一数对的袋鼠视角。
2-2 W-Wing

假设r3c6 = a,则a是2和3的其一。对b5进行关于a的排除,我们发现,因为r6上已经有2和3的确定值,所以2和3只能填到r45c56。而因为r3c6 = a,所以r45c5有且仅有一格是a。接着观察到,r9c5 = {23},而因为r45c5 = a,所以r9c5只能填b(其中b是不同于a的、属于{23}的另一个数)。这个时候,我们确定了r3c6和r9c5其实是一个跨区数对。所以,r7c6 <> ab,而它们是{23},所以r7c6只能是非2和非3的另外的数,即r7c6 = 7。
全标之后你就会发现,它就是一种特殊的W-Wing结构(可能中间带有区块,但是W-Wing可以走两个方向)。
2-3 死环

如图所示,我们假设r9c9 = a,则a是{29}的其一。如果r9c9是a的话,就可以得到r5c9 = b、r6c8 = a(b不同于a且均是2和9其一)。而观察b1,我们发现b1有确定值2和9,所以r2c3 <> a,所以观察c3,只可能是r4c3 = a。
此时我们可以得到,r5c9和r4c3是关于2、9的跨区显性数对。所以r5c2 <> 29;而最后观察c3,填入1的位置只剩下一处:r2c3,所以r2c3 = 1。
2-4 远程数组
实际上,远程数对由于涉及的数字很简单,所以袋鼠依然可以运作。而且,袋鼠可以用于多种数字,所以不只是远程数对,远程三数组等等也都可以出现。
2-4-1 远程数对

如图所示。我们假设r7c8 = a,通过唯余操作,得到a是{28}之一,可以以此得到r2c6、r4c7、r5c4都是a;r2c8、r4c6、r5c9、r8c4都是b(b不同于a且都是{28}之一)。所以,图中就有相当多的跨区数对了,这里就不啰嗦有哪些了,删掉所有红色单元格上的2和8,然后与此同时可以得到r7c5 = 9。
2-4-2 远程三数组

如图所示,我们先假设r4c2 = a(a是{16}其一),于是可以连续得到一些填数,此时其实已经形成了远程数对,得到r6c6 <> 16(即填2)的结果,不过这里我们还有结论,所以不着急出数。

接着,由于b8只有1、2、6三个数没有填了,那么我们假设a、b、c是1、2、6,且互不相同。基于这一点,我们显然可以知道,r7c5是b和c的其一(图上的“|”表示或的意思,也就是b和c的其一);同理,我们依然可以假设c9上剩余两格分别都是b和c的其一。
此时,继续观察b5和b6。由于b5可以确定a的位置形成了区块,所以b6也可以形成a的区块结构;同样,b3也有a的区块,此时它们构成复合区块结构,所以r1c5 <> a,故也只能填入b和c的其一。此时观察c5,可以发现有两处单元格都是b和c的其一,而由于两个单元格同列,所以它们构成数对。
此时并没有结束。由于r4c1 = a的关系,三个单元格的交集r4c5是这个跨区三数组的交集(把a也算在结构内,就是三个单元格填a、b、c三种数字了,所以可以看作跨区的三数组),所以r4c5 <> abc,于是这一个单元格就出数了。于是题目瓦解。
可以看到,这一种利用方式也是非常神奇的,除了远程数对的链式结构以外,还有现在发现的“叠加影响”形成的远程三数组(Remote Triple)结构。
2-5 唯一矩形
这个示例比较麻烦一些,们依然使用候选数视角给大家标注,方便对比。

如图所示,我们假定r4c1 = a(显然,a是7和9的其一),同样我们设定字母b和c属于{179}之一,并假设它们互不相同(此时一定要注意,因为三个数互不相同,而a不包含数字1,所以在b和c里,一定有一个数字是1)。那么,因为r4c1是a的关系,r4c29和r6c2都只剩下1和{79}之一;换句话说,它们的填数实际上就是b或c的其一。

显然,我们通过刚才的假设,因为此时的b和c可以认为是等价的两个变量的表示符号,所以随便假设r4c2是b还是c都行。那么我们假设为b继续推导。
由于r4c2是b,所以r4c9只能是c(字母a和b在这一行已经用过了,这三个字母代表的是三种完全不同的数字,所以只能是c了)。同理r6c2也只能是c了。我们此时着眼于r46c29四个单元格上。显然,如果r6c9是b了,即使字母代表的数字可变,但当前状态下,r46c29构成了关于b和c的唯一矩形,形成了致命形式,所以r46c29此时应当删除数字b。可是b是多少呢?这一点我们可不知道。不过,我们可以通过假设的字母所给出的范围来间接确定删除的数字可以是哪个。
因为b和c在此时的假设下是等效的,所以这个唯一矩形的构型构成了关于b和c的致命形式(因为b和c不相同,显然它们形成了致命形式)。那么此时删除的数字就变为c了。所以确实确定不了吗?还没完呢。别忘了最开始的假设,我们认为的b和c里一定有一个数字是1,这也就意味着我们刚才所有可能成立的两种假设下,暗含了一点:r6c9不应该是1。因为r6c9一定只能填入的是b和c,仅此两种情况;而它俩一定有一个数字是1,所以1是我们一定可以确定可以被删除掉的数字。所以,r6c9 <> 1,这就是这个题目的结论(删数如前一个图所示)。
我们再来看一则示例。

如图所示,如果我们尝试假设r6c1 = 3,则由于b6的3的候选数分布情况,可以得到r5c5 = 3。此时,我们发现r5c4只有候选数1和9,不论我们假设它填入什么数,最终r5c1和r6c5都会得到与之对应的另外一个数。如图所示,我们通过代数法,可以轻松得到r56c15形成关于3和b的致命形式。所以假设的候选数r6c1(3)应当被删除。
当然,还有很多结构都可以采用袋鼠的视角进行观察和推导,不过这里就不再一一列举了。
至此,本篇章的内容就结束了,下一个篇章将是本文档里最难的一部分内容。