Sudoku Explained

高级 约 8 分钟

多了一条线的 X-Wing

你对 X-Wing 知道的一切在升级后都还在。唯一的改动是三条线顶替了两条。

一句话版本

剑鱼是多了一条线的 X-Wing。三条基线,每条上这个数字最多三个家,而且所有这些家都被同样三条垂直线圈住。

三条线各需要一个数字,三条覆盖线提供三份。覆盖线被供满了,所以除了九个交点,覆盖线上任何地方都可以把这个数字删掉。

形状

挑一个数字。挑三条平行线——比如列。每条线上,这个数字最多三个家。现在检查:这些家是不是全部落在同样三条行里?

是,就是剑鱼。

「最多三个」很重要,而且经常被误读。一条基线可以有一个、两个或三个家。它不能有的是第四个家、而且落在覆盖行外面——因为那样这个数字就能逃出图形,计数论证就散了。

为什么成立

三条基列,每一列都必须恰好包含一份这个数字。

假设这些列里所有家都落在第 1、2、3 行里。甲列把数字放进这三行之一,乙列也放一个,丙列也是。三个落点,分布在三行上。

能有两列落在同一行吗?不能——一行最多装一个。所以三列必须把数字放进三个不同的行,而可用的只有第 1、2、3 行,于是每一行恰好收到一个。

第 1、2、3 行因此被供满。这个数字不可能出现在这三行的任何位置,除了三条基列上的交点。

这和 X-Wing 是同一个穷举论证,只是把鸽笼说得更明确。干活的是计数:三条线、三个家、三个位置。

真实盘面

数字 1 在第 3、8、9 列里,都只出现在第 3、5、7 行这几个位置。3 列各要放一个 1,正好把这几行各占掉一个,所以这几行在列外的 1 都可以删。

数字 1,而这个图形是按列走的——这一点值得注意,因为多数人先扫行,会漏掉它。

所以三条列各放一个 1,而它们必须一行一个地分布在第 3、5、7 行上。这三行被供满。现在把基线以外的位置清掉:

一个图形换五个排除。注意每条基线只有两个家,不是三个——图形并不要求完整的三个乘三个,它只要求没有第四个家,两个远在许可范围内。

这里「为什么读出来是列而不是行」值得说清楚。如果去扫行,会看到第 3 行的 1 散在四个不同格子里,看着完全不成形。共线的限制是在列上显现的,所以搜索必须往那个方向跑。

怎么扫

剑鱼的找法是 X-Wing 的找法加一条线,纪律也一样。

  1. 一次只拿一个数字。 永远不要找形状,要找具体某个数。
  2. 数每条线的家。 对这个数字,逐列走一遍,记下每列能放它的格子数。留下两个或三个的线。
  3. 把候选分组。 如果三条列的候选全都落在同样三行之内,就是剑鱼。如果牵进第四行,继续找。
  4. 查第四个家。 一条基线在三条覆盖行之外还有家,整个图形就废了。这一步最常被跳过,也是唯一真正要紧的一步。
  5. 清覆盖线。 把这三行里、基线以外的该数字删掉。然后把行列对调,整个扫描再来一遍。

一个实用捷径:剑鱼通常出现在已经填了不少位置的数字上。盘面上只剩五个或更少的家时,每条线的家数都很少,图形一眼可见。从出现次数最多的数字开始。

陷阱

三格当三条线。 剑鱼不是一行里的三格,是三条线、每条最多三个家。把格子数当成线数,会做出没有依据的排除。

在基里面删。 基列是这个数字必须落下的地方,没有什么可以让出来。所有删除都在覆盖行、基线之外。把方向搞反,是用一个有效图形把盘面弄坏的最常见方式。

一条基线有四个家。 如果三条列里有一条在第 6 行还有第四个家,这个数字就能逃出去,第 1 到 3 行也不再各得一份。没有图形,没有排除。

以为九个交点都填满。 其中好几个会是空的或已经解出来。图形是关于线的陈述,不是一个九格方块——上面那张盘面只标了六个角,正是这个原因。

用在哪

剑鱼属于「X-Wing 已经查过、空手」的那一层。它比 X-Wing 少见,也难看得多,因为九格形状不会像矩形那样自己跳出来。

务实的工作流是:先把每个数字的 X-Wing 扫一遍,再对还没解决的数字扫剑鱼。两个都空手,下一步通常是翼,而不是水母——水母更罕见。

常见疑问

什么是剑鱼?

三条平行线上某数字各最多三个家,且全部落在同样三条垂直线上。三条基线上每条都必须放这个数字,所以三条覆盖线全被供给。

剑鱼的九格都必须有这个数字吗?

不必。图形由线定义,不由格子定义。九个交点里有些没有这个候选,是允许的,只要没有哪条基线在覆盖线之外还有第四个家。

剑鱼和 X-Wing 有什么区别?

X-Wing 用两条基线和两条覆盖线,四格。剑鱼三条对三条,最多九格。排除落在覆盖线这条规则完全一样。

排除往哪个方向走?

从基线往覆盖线。如果基是三条列,就在穿过它们的三条行里删、列以外的地方。搞反是最常见的错误。