介绍
拼图规则:
谜题Binary(也称为Takuzu或Subiku)很容易理解,并且只有几个规则:
由于游戏的名称是二进制,所以很明显,但是只能填充零和一。
- 同一数字最多只能垂直或水平相邻
- 每行和每一列必须包含相等数量的零和一(这意味着每个二进制游戏都将始终具有偶数维)。
- 可能没有重复的行,也没有重复的列(零和一的顺序完全相同)。
如果愿意,可以在www.binarypuzzle.com上玩游戏。
策略:
根据规则1,在以下情况下,我们始终可以填充数字:
-同一位数字中已有两个彼此垂直或水平相邻,在这种情况下,我们可以在两侧填充相对的数字。即.11...
→ 0110..
。
-在垂直或水平方向上有两个相同的数字,它们之间只有一个间隙。即.1.1..
→.101..
根据规则1,当剩下三个空格并且我们不能有三个相邻的相同数字时,我们可以填充其中一个空格。即.0.1.0
→ 10.1.0
(我们仍然必须填写两个,而且中间不能有三个相邻的,所以第一个间隙必须是a 1
。)
根据规则2,如果一半的空白已经用相反的数字填充,那么我们总是可以填充行或列中的剩余空白。即.1.011
→010011
根据规则3,如果在相等顺序的行上只剩下两个要求解的数字,我们总是可以填充相反的数字。即101100 & 1..100
→101100 & 110100
根据规则3,有时我们可以在一条有序排列的直线上留出三个间隙时填充一个间隙。即010011 & .1.01.
→ 010011 & .1.010
(此处我们不能在1
末尾填写a ,因为这意味着我们必须在其他两个空白处填充零,使两行顺序相等。)
例:
我们从以下6x6网格开始,其中填充了一些1和0(点是我们尚未填充的间隙):
.1....
.10.0.
1.11..
.1....
...1.0
......
根据规则1和2,我们可以填写以下数字:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
根据规则1,我们可以在第5行第1列中填写1:
.1.01.
.1010.
101100
010011
10.1.0
.010..
根据规则3,我们可以在第1行第6列(当查看第4行时)填写0:
.1.010
.1010.
101100
010011
10.1.0
.010..
现在,由于规则1和2,我们可以继续用数字来填补空白。
.1.010
010101
101100
010011
10.1.0
.010.1
现在,根据规则3(在查看第3行时),我们可以完成第5行:
.1.010
010101
101100
010011
100110
.010.1
然后,根据规则1和规则2,我们可以完成难题:
011010
010101
101100
010011
100110
101001
挑战:
挑战很简单:给定起始网格,输出已解决的难题。
注意:您不必执行上述规则。您当然可以,并且它应该为您提供有关如何实施此挑战的提示,但是考虑到规则对解决方案进行暴力破解完全可以。
如何解决问题取决于您,但是挑战在于输出已解决的难题。
挑战规则:
- 网格的输入和输出格式很灵活,但请说明您使用的格式。(即2D字节数组;带换行符的字符串;等等。)
- 上面的内容也适用于所使用的字符。在示例中,我使用
01.
,但是如果您愿意,可以ABx
改用。请说明您使用的输入/输出格式和字符。 - 你可以假设仅将用于以下网格大小:
6x6
;8x8
;10x10
;12x12
;14x14
;16x16
。
通用规则:
- 这是代码高尔夫球,因此最短答案以字节为单位。
不要让代码高尔夫球语言阻止您使用非代码高尔夫球语言发布答案。尝试针对“任何”编程语言提出尽可能简短的答案。 - 标准规则适用于您的答案,因此允许您使用STDIN / STDOUT,具有适当参数的函数/方法,完整程序。您的来电。
- 默认漏洞是禁止的。
- 如果可能的话,请添加一个带有测试代码的链接。
- 另外,如有必要,请添加说明。
测试用例:
添加这些点只是为了提高可读性,您可以随意使用空格或其他任何您喜欢的空格。输入和输出格式都很灵活。
Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00
Output:
101010
010011
100101
011010
001101
110100
Input:
.1....
.10.0.
1.11..
.1....
...1.0
......
Output:
011010
010101
101100
010011
100110
101001
Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.
Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011