游戏BattleBlock Theatre有时包含一个谜题,这是Lights Out的广义版本。您有三个相邻的块,每个块表示一个介于1到4之间的水平,包括小节,例如:
|
||||
||
如果触摸一个块,则该块以及任何相邻的块都会增加其级别(从4换回1)。当所有三个块都显示相同的级别(与哪个级别无关)时,难题就解决了。由于触摸块的顺序无关紧要,因此我们通过触摸每个块的频率来表示一种解决方案。上述输入的最佳解决方案是201
:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
游戏可以很容易地概括出任意数量的方块,尽管对于某些数字而言,并非所有配置都可以解决。
挑战
给定一系列的块级别,返回需要触摸每个块以解决难题的频率。例如,上面的示例将作为给出142
并可能产生201
结果。如果没有解决方案,请返回您选择的一致输出,这与所有可能的解决方案(例如-1
,空字符串)是有区别的。
您可以编写函数或程序,通过STDIN,命令行参数或函数参数以任何方便的列表或字符串格式进行输入,并通过返回值或通过打印到STDOUT进行类似输出。
您的代码应在一分钟内在一台合理的机器上返回所有测试用例的正确结果。(这不是一个完全严格的限制,因此,如果您的解决方案花费一分十秒,那很好,但是如果花费三分钟,那不是很好。好的算法可以在几秒钟内轻松解决它们。)
这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。
例子
解决方案不是唯一的,因此您可能会得到不同的结果。
Input Output
1 0
11 00
12 No solution
142 201
434 101
222 000
4113 0230
32444 No solution
23432 10301
421232 212301
3442223221221422412334 0330130000130202221111
22231244334432131322442 No solution
111111111111111111111222 000000000000000000000030
111111111111111111111234 100100100100100100100133
412224131444114441432434 113013201011001101012133
据我所知,每个输入有4个解决方案,其中块数为0 mod 3或1 mod 3,有0或16个解决方案为2 mod 3。