ゲームBattleBlock Theaterには、Lights Outの一般化バージョンであるパズルが含まれることがあります。隣接する3つのブロックがあります。各ブロックは、バーを含む1〜4のレベルを示します。例:
|
||||
||
ブロックにタッチすると、そのブロックと隣接するブロックのレベルが増加します(4から1に戻ります)。パズルは、3つのブロックすべてが同じレベルを示すときに解決されます(どのレベルでもかまいません)。ブロックをタッチする順序は重要ではないため、各ブロックがタッチされる頻度によってソリューションを示します。上記の入力の最適なソリューションは次のとおりです201
。
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
ゲームは非常に簡単に任意の数のブロックを一般化しますが、一部の数では、すべての構成が解決可能ではありません。
チャレンジ
ブロックレベルのシーケンスが与えられたら、パズルを解くために各ブロックをタッチする必要がある頻度を返します。例えば、上記の例はとして与えられ、結果として142
生じる可能性があり201
ます。解決策がない場合は、選択した一貫した出力を返します。これは、すべての潜在的な解決策、-1
または空の文字列などと区別できます。
関数またはプログラムを記述し、STDIN、コマンドライン引数または関数引数を介して入力を任意の便利なリスト形式または文字列形式で取得し、同様に戻り値を介して出力するか、STDOUTに出力します。
コードは、妥当なマシンで1分以内にすべてのテストケースに対して正しい結果を返す必要があります。(これは完全に厳密な制限ではないため、ソリューションに1分10秒かかる場合は問題ありませんが、3分かかる場合はそうではありません。優れたアルゴリズムは数秒で簡単に解決できます。)
これはコードゴルフなので、最短の回答(バイト単位)が勝ちです。
例
ソリューションは一意ではないため、異なる結果が得られる場合があります。
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
私の知る限り、ブロック数が0 mod 3または1 mod 3である入力ごとに正確に4つのソリューションがあり、2 mod 3である0または16のソリューションがあります。