高级 约 7 分钟
三格吃下三个数字
三张候选表不必长得一样,只需合起来正好是三个数字,不多一个。
一句话版本
显性三数组,是同一单元里三格,它们的候选表合在一起,恰好包含三个不同的数字。
这三个数字必须填满这三格。没有多余的留给单元里其他格子,所以这三个数字可以从单元里其他每一格删掉。
形状
条件看的是并集,不是每张表各自的样子。这里几乎所有人都会走错。
下面三种都是合法的显性三数组:
| 甲格 | 乙格 | 丙格 | 并集 |
|---|---|---|---|
| 「4、5」 | 「5、7」 | 「4、5、7」 | 4、5、7 |
| 「4、5、7」 | 「4、5、7」 | 「4、5、7」 | 4、5、7 |
| 「4、7」 | 「4、7」 | 「5、7」 | 4、5、7 |
三种看起来差别很大,但都在三格里消耗掉 4、5、7 这三个数字。
不成立的是:「4、5」「5、7」「4、7、9」。并集是四个数字摊在三格上。有退路,什么都没被用掉,什么都别删。
为什么成立
三格、三个数字,每格填一个值。
假设并集是「4、5、7」。不管这三格最后填成什么,取值集合必然是「4、5、7」的子集——因为没有一格能填自己候选表以外的东西。三格需要三个值,所以这个子集恰好三个元素,所以三格装的就是 4、5、7,只是次序未知。
一个单元里每个数字最多出现一次。三份都在三数组里面了。单元里其他每一格,都被这三个数字排除。
和数对一样,你永远不知道具体哪格是哪个数——而排除不依赖于此。
真实盘面
第 5 行里三格,候选合起来恰好是 4、5、7:
- R5C1 写着「4、5、7」。
- R5C2 写着「4、5、7」。
- R5C7 写着「4、7」。
并集:「4、5、7」——三个不同的数字,摊在三格里,一点没剩。
所以第 5 行把 4、5、7 放在这三格内,次序未知。现在看 R5C3,它写着「4、5、6」。它的 4 和它的 5 都得走:R5C3 掉到只剩 6,一个单候选。
注意三张表不必长得一样。R5C7 只有两个候选,照样属于这个三数组——因为被用掉的是并集。
怎么扫
三数组是按单元找的,搜索更像一道小组合题,而不是视觉识别。
- 先收集短表。 在一个单元里,凡四个以上候选的格子全部忽略。三数组要求三格并集是三个数字,所以每一格最多三个候选。
- 先找「两加一」。 最常见的三数组是两格共享「x、y」,第三格给出「x、z」或「y、z」这样的重叠。从这里入手。
- 验并集。 取三张候选表,数不同数字的个数。恰好三个,就是三数组;四个以上,什么也不是。
- 三种单元都查。 宫里的三数组在宫里删;如果这三格同时共用一行,行里也能删。
- 回头读受影响的格子。 和所有排除技巧一样,收益通常是某格掉到单候选。
一个值得备着的捷径:三数组常常藏在三个宫排成一排的地方。如果一行的三个宫各有一格在同一列上很拥挤,验并集的成本很低,而且常常成立。
显性三数组 vs 隐性三数组
还是方向。
- 显性三数组:三格被锁在三个数字上 → 把这三个数字从单元的其余格子删掉。
- 隐性三数组:三个数字被锁在三格上 → 把这三格里的其他候选删掉。
显性三数组讲的是「格子跑不掉」,隐性三数组讲的是「数字跑不掉」。两者消耗的是同一个三乘三结构,而且在同一个单元里,很常见的是一组数字具备前者、另一组数字具备后者。
陷阱
长度误解。 要求每格都恰好三个候选。真正重要的是并集,一张「4、5」的表和三张「4、5、7」一样有资格待在三数组里。
并集成四。「4、5」「4、7」「5、7、9」——三格、四个不同数字。这是最常见的假象之一,因为它看起来像一个漂亮的三角重叠。它不是三数组,从它删候选会把盘面弄坏。
两格加一个路人。 两格构成数对,旁边还有第三格恰好共享部分候选。那是数对加噪音。数对仍然成立——但只作为数对,只做数对该做的排除。
用在哪
显性三数组在难题里频繁出现,而且一旦候选数写出来,它几乎是免费的:搜索是一次带过滤的比较,而不是看盘面。
它也能推广:四格吃四个数字是显性四数组,推理一点都不用改。四数组罕见得多数人懒得给它命名,但检验方法一样——并集大小等于格子数。
常见疑问
什么是显性三数组?
同一单元里三格的候选合起来恰好是三个数字。这三个数字必须占满这三格,所以单元里其他格子不能再出现它们中的任何一个。
三格都必须有三个候选吗?
不必,这是最常见的误解。像「4、5」「5、7」「4、5、7」这样的三张表就是合法的三数组。看的是并集,不是每张表的长度。
显性三数组和隐性三数组有什么区别?
显性三数组把这三个数字从单元里其他格子删掉;隐性三数组把这三格里的其他候选删掉。形状相同,排除方向相反。
两格能构成显性三数组吗?
不能。两格的候选合起来有三个数字,意味着必有一格要装两个值,不可能。三数组需要三格。