El juego BattleBlock Theater ocasionalmente contiene un rompecabezas que es una versión generalizada de Lights Out . Tienes tres bloques adyacentes, cada uno de los cuales indica un nivel entre 1 y 4 inclusive con barras, por ejemplo:
|
||||
||
Si tocas un bloque, entonces ese bloque, así como cualquier bloque adyacente, incrementará su nivel (retrocediendo de 4 a 1). El rompecabezas se resuelve cuando los tres bloques muestran el mismo nivel (no importa qué nivel). Como el orden en el que toca los bloques no importa, denotamos una solución por la frecuencia con la que se toca cada bloque. La solución óptima para la entrada anterior sería 201
:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
El juego generaliza fácilmente cualquier número de bloques, aunque para algunos números, no todas las configuraciones son solucionables.
El reto
Dada una secuencia de niveles de bloque, regrese la frecuencia con la que se debe tocar cada bloque para resolver el rompecabezas. Por ejemplo, el ejemplo anterior se daría como 142
y podría dar 201
como resultado. Si no hay solución, devuelva un resultado consistente de su elección, que se distingue de todas las soluciones potenciales, por ejemplo, -1
o una cadena vacía.
Puede escribir una función o programa, recibir información a través de STDIN, argumento de línea de comando o argumento de función, en cualquier lista conveniente o formato de cadena, y generar de manera similar a través de un valor de retorno o imprimiendo en STDOUT.
Su código debe devolver resultados correctos para todos los casos de prueba dentro de un minuto en una máquina razonable. (Este no es un límite completamente estricto, por lo que si su solución demora un minuto y diez segundos, está bien, pero si demora 3 minutos, no lo es. Un buen algoritmo los resolverá fácilmente en segundos).
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Ejemplos
Las soluciones no son únicas, por lo que puede obtener resultados diferentes.
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
Hasta donde yo sé, hay exactamente 4 soluciones para cada entrada donde el número de bloques es 0 mod 3, o 1 mod 3, y hay 0 o 16 soluciones donde es 2 mod 3.