Das Spiel BattleBlock Theatre enthält gelegentlich ein Puzzle, das eine verallgemeinerte Version von Lights Out ist . Sie haben drei benachbarte Blöcke, von denen jeder eine Stufe zwischen 1 und 4 einschließlich mit Balken anzeigt, z.
|
||||
||
Wenn Sie einen Block berühren, erhöht dieser Block sowie ein beliebiger benachbarter Block seinen Pegel (von 4 auf 1). Das Rätsel ist gelöst, wenn alle drei Blöcke dasselbe Level aufweisen (egal welches Level). Da die Reihenfolge, in der Sie die Blöcke berühren, keine Rolle spielt, geben wir an, wie oft jeder Block berührt wird. Die optimale Lösung für die obigen Eingaben wäre 201
:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
Das Spiel verallgemeinert sehr leicht eine beliebige Anzahl von Blöcken, obwohl für einige Zahlen nicht alle Konfigurationen lösbar sind.
Die Herausforderung
Geben Sie bei einer vorgegebenen Folge von Blockebenen an, wie oft jeder Block berührt werden muss, um das Rätsel zu lösen. ZB würde das obige Beispiel als gegeben 142
und könnte 201
als Ergebnis ergeben. Wenn es keine Lösung gibt, geben Sie eine konsistente Ausgabe Ihrer Wahl zurück, die von allen möglichen Lösungen unterscheidbar ist, z. B. -1
oder eine leere Zeichenfolge.
Sie können eine Funktion oder ein Programm schreiben, Eingaben über STDIN, Befehlszeilenargument oder Funktionsargument in einem beliebigen geeigneten Listen- oder Zeichenfolgenformat vornehmen und auf ähnliche Weise über einen Rückgabewert oder durch Drucken an STDOUT ausgeben.
Ihr Code sollte innerhalb einer Minute auf einem vernünftigen Computer für alle Testfälle korrekte Ergebnisse liefern. (Dies ist kein striktes Limit. Wenn Ihre Lösung also eine Minute und zehn Sekunden dauert, ist das in Ordnung. Wenn es jedoch drei Minuten dauert, ist dies nicht der Fall. Ein guter Algorithmus kann sie problemlos in Sekunden lösen.)
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Beispiele
Die Lösungen sind nicht eindeutig, daher erhalten Sie möglicherweise unterschiedliche Ergebnisse.
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
Soweit ich weiß, gibt es genau 4 Lösungen für jeden Eingang, bei denen die Anzahl der Blöcke 0 bis 3 oder 1 bis 3 beträgt, und es gibt 0 oder 16 Lösungen, bei denen es 2 bis 3 beträgt.