有一个名为枚举的大脑游戏(我是基于高祖制作的)。你的挑战是玩这个游戏。
解决4x4枚举/Takuzu的游戏。
游戏的特点是四轮驱动板,由红色和紫色的细胞组成。
起始网格将作为一个仅由0
、1
和2
组成的16个字符/字节字符串来表示。下面是一个示例:
0001100002001200
1
代表红细胞,2
代表紫色细胞。所有输入板都是可解决的。
注意:如果您的语言不支持字符串文字输入,则可以将输入作为整数数组。请在你的答复中说明情况是这样的。所以没有混淆,这就是所谓的数组应该是什么样子:
[0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 0]
不允许嵌套数组。
解决后的板应该以与上面相同的格式输出;一个16个字符/字节字符串,仅由1
和2
组成。以下是上述输入的解决方案:
2121112222111212
同样,1
代表一个红细胞,2
代表一个紫色细胞。
对于任何以ASCII网格形式输出解题板的答案,都会提供一个-25字节的加成。下面是前面提到的董事会的一个例子。
2|1|2|1
-+-+-+-
1|1|2|2
-+-+-+-
2|2|1|1
-+-+-+-
1|2|1|2
一个-50字节额外的任何答案,输出解决板的颜色.这可以输出为图像或彩色文本。
如果选择了彩色文本,输出应该如下所示:
2121
1122
2211
1212
但是,如果图像是选择的输出方法,则生成的文件应该是20x20像素,其中每个单元格是一个彩色的5x5像素块。下面是一个示例:
以下是颜色代码:
Red - #a73cba OR (167, 60, 186)
Purple - #f94a32 OR (249, 74, 50)
In: 0020010100000100
Out: 1221212112122112
In: 0010000200121000
Out: 2211112221121221
In: 1000100102000000
Out: 1122122122112112
发布于 2016-01-06 02:54:43
在C中,这似乎是一个很有趣的挑战,很确定它可以被更多的打,但这里有一个开始:
#define m(a,b)for(j=0;j<4;j++){l[j]=i&a<<j*b;if(__builtin_popcount(l[j])-2)goto l;for(k=0;k<j;k++)if(l[j]==l[k])goto l;}
i,j,k,l[4];f(char*s){for(i=0;i<65536;i++){m(15,4)m(4369,1)for(j=0;j<16;j++)if((!(i&1<<j)==s[j]-49)&&(s[j]!=48))goto l;for(j=0;j<16;j++)putchar(50-!(i&1<<j));l:;}}
输入作为字符串传递给函数f()
。输出到STDOUT。
发布于 2016-01-06 13:40:01
->g{[o=?1,p=?2].repeated_permutation(16).find{|x|a=x.each_slice(4).to_a
t=a.transpose
a.uniq.size==4&&t.uniq.size==4&&(a+t).all?{|y|y.count(o)==2}&&x.zip(g.chars).none?{|y|y==[o,p]||y==[p,o]}}*''}
repeated_permutation
,为什么你的名字要这么长?
这只是遍历所有可能的解决方案,直到其中一个与输入模式匹配为止。
https://codegolf.stackexchange.com/questions/68646
复制相似问题