Questions tagged «sudoku»

这个挑战与数独难题的解决,创建或其他工作直接相关。

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] …
11 code-golf  sudoku 

1
有多少个数独谜题?
这不是Sudoku求解器,也不是Sudoku检查器。 您的挑战是编写一个函数或脚本,作为输入,它提供2D Sudoku拼图的“块”大小(对于经典9x9板为3 ,对于16x16板为4 ,等等),将计算出该数字的近似值针对该大小存在的不同难题(解决方案)。 例如,在给定输入3的情况下,您的程序应该以期望的精度打印数字6,670,903,752,021,072,936,960的近似值,这是已知的9x9 Sudoku数独难题的已知数量,或者在考虑到各种对称性时为5,472,730,538。您的解决方案应说明是计算对称性还是忽略对称性。 “所需的精度”没有定义:您的程序可能运行给定的时间,然后输出结果,或者将其计算到给定数量的有效数字,甚至永远运行,从而打印出越来越好的近似值。关键是应该有可能使其在有限的时间内以任何所需的精度计算结果。(因此,“ 42”是不可接受的答案。)将结果的精度限制在可用的机器浮动范围内是可以接受的。 不能访问在线资源,不能在文件名中存储源代码,等等。 PS:我知道这是一个难题(如果我没记错的话,请填写NP。)但是这个问题只是在寻求一个近似的统计解决方案。例如,您可以尝试满足一个(或两个以上)约束的随机配置,计算其中存在多少约束,然后检查获得满足所有三个约束的难题的频率。对于小尺寸(确定为size = 3,可能为4),这将在适当的时间内起作用,但是该算法应该足够通用,以适合任何尺寸。 最好的算法获胜。 PS2:我从“代码高尔夫”更改为“代码挑战”,以更好地反映问题的难度并鼓励采用更聪明的解决方案,而不是笨拙但效果良好的解决方案。但是由于显然“最佳算法”尚不清楚,所以让我尝试正确定义它。 给定足够的时间并且不考虑常量因素(包括CPU和解释器速度),或者等效地考虑它们的无症状行为,哪种解决方案将以最快的速度收敛到准确的结果?

3
建立一个杀手数独解算器
您以为普通数独很难,现在尝试杀手数独! 在Killer Sudoku游戏中,根本没有任何数字。取而代之的是,您会得到据说相加一定数量的区域。考虑以下来自维基百科的示例: 及其解决方案: 您编写的程序将采用以下格式:由代表区域的81个字母组成的序列,再由数字序列组成。然后,序列中的每个数字代表每个字母区域中数字的总和,从“ A”,“ B”等开始。 然后它将输出代表解决方案的81位数字序列。 例如,上面的示例难题将具有以下输入: AABBBCDEFGGHHCCDEFGGIICJKKFLMMINJKOFLPPQNJOORSPTQNUVVRSTTQWUUXXSYZWWaaXXSYZWbbbcc 3 15 22 4 16 15 25 17 9 8 20 6 14 17 17 13 20 12 27 6 20 6 10 14 8 16 15 13 17 结果输出为: 215647398368952174794381652586274931142593867973816425821739546659428713437165289 您可以假设输入有效,并且区域将始终按A,B,...,Y,Z,a,b,...,z的顺序显示。 (最有效的代码胜出。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.