Il gioco BattleBlock Theater contiene occasionalmente un puzzle che è una versione generalizzata di Lights Out . Hai tre blocchi adiacenti, ognuno dei quali indica un livello compreso tra 1 e 4 inclusi con le barre, ad esempio:
|
||||
||
Se tocchi un blocco, quel blocco e qualsiasi blocco adiacente ne aumenteranno il livello (tornando indietro da 4 a 1). Il puzzle è risolto quando tutti e tre i blocchi mostrano lo stesso livello (non importa quale livello). Poiché l'ordine in cui tocchi i blocchi non ha importanza, indichiamo una soluzione con la frequenza con cui ogni blocco viene toccato. La soluzione ottimale per l'input sopra sarebbe 201:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
Il gioco generalizza molto facilmente qualsiasi numero di blocchi, anche se per alcuni numeri, non tutte le configurazioni sono risolvibili.
La sfida
Data una sequenza di livelli di blocco, restituisci la frequenza con cui ogni blocco deve essere toccato per risolvere il puzzle. Ad esempio, l'esempio di cui sopra verrebbe fornito come 142e potrebbe dare 201come risultato. Se non esiste una soluzione, restituire un output coerente di propria scelta, che è distinguibile da tutte le potenziali soluzioni, ad esempio -1o una stringa vuota.
È possibile scrivere una funzione o un programma, accettare input tramite STDIN, argomento della riga di comando o argomento della funzione, in qualsiasi elenco o formato stringa conveniente, e allo stesso modo output tramite un valore di ritorno o stampando su STDOUT.
Il codice dovrebbe restituire i risultati corretti per tutti i casi di test entro un minuto su una macchina ragionevole. (Questo non è un limite completamente rigido, quindi se la tua soluzione richiede un minuto e dieci secondi, va bene, ma se impiega 3 minuti, non lo è. Un buon algoritmo li risolverà facilmente in pochi secondi.)
Questo è il golf del codice, quindi vince la risposta più breve (in byte).
Esempi
Le soluzioni non sono uniche, quindi potresti ottenere risultati diversi.
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
Per quanto ne so, ci sono esattamente 4 soluzioni per ogni ingresso in cui il numero di blocchi è 0 mod 3 o 1 mod 3 e ci sono 0 o 16 soluzioni in cui è 2 mod 3.