介绍
用最少的字节数写一本关于Hitori难题的求解器。
挑战
您的任务是为Hitori(日语中的“孤独”一词;游戏名称的含义为“让我一个人呆”)编写解算器。规则如下:
- 您会看到一个n×n的单元格网格,每个单元格包含1到n(含)之间的整数。
- 您的目标是通过从给定的网格中删除数字,以确保在该网格的每一行和每一列中都不会出现多次重复的数字,但要遵守以下两个规则中的限制,
- 您不能从两个相邻的(水平或垂直)单元格中删除两个数字。
- 其余编号的单元必须全部相互连接。这意味着可以将任意两个剩余编号的单元格与一条曲线连接,该曲线仅由连接相邻剩余编号(水平或垂直)的线段组成。(感谢@ user202729指出这是丢失的)
我希望规则现在已经明确。如果规则有任何不清楚的地方,请查看Wikipedia页面。
测试用例
删除数字的单元格用0表示。
Input -> Output
4
2 2 2 4 0 2 0 4
1 4 2 3 -> 1 4 2 3
2 3 2 1 2 3 0 1
3 4 1 2 3 0 1 2
4
4 2 4 3 0 2 4 3
4 1 1 2 -> 4 1 0 2
3 1 2 1 3 0 2 1
4 3 1 3 0 3 1 0
5
1 5 3 1 2 1 5 3 0 2
5 4 1 3 4 5 0 1 3 4
3 4 3 1 5 -> 3 4 0 1 5
4 4 2 3 3 4 0 2 0 3
2 1 5 4 4 2 1 5 4 0
8
4 8 1 6 3 2 5 7 0 8 0 6 3 2 0 7
3 6 7 2 1 6 5 4 3 6 7 2 1 0 5 4
2 3 4 8 2 8 6 1 0 3 4 0 2 8 6 1
4 1 6 5 7 7 3 5 -> 4 1 0 5 7 0 3 0
7 2 3 1 8 5 1 2 7 0 3 0 8 5 1 2
3 5 6 7 3 1 8 4 0 5 6 7 0 1 8 0
6 4 2 3 5 4 7 8 6 0 2 3 5 4 7 8
8 7 1 4 2 3 5 6 8 7 1 4 0 3 0 6
9
8 6 5 6 8 1 2 2 9 8 0 5 6 0 1 2 0 9
5 6 2 4 1 7 9 8 3 5 6 2 4 1 7 9 8 3
5 8 2 5 9 9 8 2 6 0 8 0 5 0 9 0 2 0
9 5 6 6 4 3 8 4 1 9 5 6 0 4 3 8 0 1
1 1 6 3 9 9 5 6 2 -> 0 1 0 3 9 0 5 6 2
1 1 4 7 3 8 3 8 6 1 0 4 7 0 8 3 0 6
3 7 4 1 2 6 4 5 5 3 7 0 1 2 6 4 5 0
3 3 1 9 8 7 7 4 5 0 3 1 9 8 0 7 4 5
2 9 7 5 3 5 9 1 3 2 9 7 0 3 5 0 1 0
这些测试案例分别来自Concept Is Puzzles,PuzzleBooks,Concept Is Puzzles,Wikipedia和Youtube。
眼镜
无需担心异常处理。
您可以假设输入始终是具有唯一解决方案的有效难题,并且可以在编写代码时利用此优势。
这是code-golf,赢得的最低字节数。
4 <= n <= 9(最初为16,根据Stewie Griffin的建议更改为9,也节省了IO的麻烦)
您可以采用任何标准格式输入和提供输出,并且可以自由选择格式。
有关输出格式的一些建议是(但您不限于这些)
- 输出最终网格
- 输出包含所有已删除数字的网格
- 输出上述之一的坐标列表
与往常一样,默认漏洞适用于此。
相关(受此挑战启发):检查矩阵中的所有元素是否都已连接
我的最后一个挑战:七人游戏的扩展
4 <= n <= 16
,但是最大的测试案例是n=9
。我建议您发布一个n=16
测试案例,或者说4 <= n <= 9
。顺便说一句好挑战:)