2
数独的Y翼策略
我最近获得了一个新的Sudoku应用程序,该应用程序可以生成非常难的Sudoku,这无法使用标准策略来解决。所以我必须学习一些新知识。这些策略之一是Y翼策略。它被列为“艰难策略”,但实际上并不难。 例 对于此策略,只有4个单元很重要。因此,我忽略了图像中的所有其他单元格。 我们查看每个单元的所有候选。在以下示例中,我们有一个包含候选对象的单元格3 7(这意味着我们已经拒绝了这些候选对象1 2 4 5 6 8 9,例如,因为1在同一行中有一个2,在同一3x3框中有一个...),一个具有候选对象的单元格6 7,有候选人3 6的牢房和有候选人的牢房2 6。Y翼策略将建议,6可以将其从彻头彻尾的单元格的候选项中删除,只留下一个可以2作为填充项的候选项。因此,我们找到了一个正确的数字,并且在解决完整数独问题上又迈进了一步。 为什么可以将6其删除? 说明 让我们假设,对于6正确的单元格,正确的数字是。现在6在此列中有一个,因此我们可以6从右上方单元格的候选项中删除,仅留下一个7,我们可以填写。左下方单元格也是如此。我们可以删除6并填写3。现在,如果我们看一下左上方的单元格,就会发现矛盾。因为现在7在同一行和3同一列中已经有一个,所以我们可以删除的7和3,而根本没有任何候选人。这显然是不可能的。因此,6不能是正确的直立单元格数。 更精确地讲:如果我们有4个具有候选对象的单元格[A B] [A C] [C D] [B C](按此顺序或循环旋转),并且这些单元格(通过相同的行,相同的列或相同的3x3框)连接成一个圆(单元格1连接到了单元格2,连接到单元3,该单元3已连接到单元4,该单元4已连接到单元1),那么您可以C从该[C D]单元中卸下它。这是至关重要的,这三个细胞[A B],[A C]并且[B C]只包含各两名候选人。不同地,该单元[C D]可能包含更多或更少(D可以是零,一个或什至更多个候选)。 请注意,我明确表示可以使用任何一种方式进行连接。在下一个示例中,您可以看到策略再次被应用。但是这次这4个单元格没有形成矩形。左下和右下单元格是简单连接的,因为它们位于同一3x3框中。Y-Wing说,我们可以删除1左上单元格的as候选。这次,该单元格中还剩下2个候选者,因此我们实际上没有找到新的正确数字。但是尽管如此,1罐的拆除为不同的策略打开了大门。 如果您需要有关该策略的更多信息或更多示例,请访问sudokuwiki.org。 挑战规格 您将收到4个列表作为输入,代表这些单元格的候选项。四个单元以圆形连接(单元1连接到单元2,单元2连接到单元3,单元3连接到单元4,单元4连接到单元1)。您可以假定每个列表都按升序排序。 您的工作是通过应用Y翼策略删除一名候选人,并以相同的顺序返回结果候选人列表。如果您无法应用该策略,则只需返回相同的候选人列表即可。 如果有两种可能的解决方案(您可以删除单元格B的A或删除单元格D的C),则只返回一个解决方案。哪一个都没关系。 输入可以是任何本机列表或数组格式。您还可以使用列表列表或类似内容。您可以通过STDIN,命令行参数,提示或函数参数接收输入,并通过返回值或简单地通过打印到STDOUT返回输出。 这是代码高尔夫球。最短的代码(以字节为单位)获胜。 测试用例 [3 7] [6 7] [2 6] [3 6] => [3 7] …