O jogo BattleBlock Theatre ocasionalmente contém um quebra-cabeça que é uma versão generalizada de Lights Out . Você tem três blocos adjacentes, cada um dos quais indica um nível entre 1 e 4, inclusive com barras, por exemplo:
|
||||
||
Se você tocar em um bloco, esse bloco, assim como qualquer bloco adjacente, aumentará seu nível (retornando de 4 para 1). O quebra-cabeça é resolvido quando os três blocos mostram o mesmo nível (não importa em que nível). Como a ordem em que você toca os blocos não importa, denotamos uma solução pela frequência com que cada bloco é tocado. A solução ideal para a entrada acima seria 201
:
| --> || --> ||| |||
|||| | || |||
|| || || --> |||
O jogo generaliza muito facilmente qualquer número de blocos, embora para alguns números, nem todas as configurações sejam solucionáveis.
O desafio
Dada uma sequência de níveis de bloco, retorne com que frequência cada bloco precisa ser tocado para resolver o quebra-cabeça. Por exemplo, o exemplo acima seria dado como 142
e poderia render 201
como resultado. Se não houver solução, retorne uma saída consistente de sua escolha, que seja distinguível de todas as soluções em potencial, por exemplo, -1
ou uma string vazia.
Você pode escrever uma função ou programa, receber entradas via STDIN, argumento de linha de comando ou argumento de função, em qualquer formato conveniente de lista ou string, e gerar saída similarmente através de um valor de retorno ou imprimindo em STDOUT.
Seu código deve retornar resultados corretos para todos os casos de teste dentro de um minuto em uma máquina razoável. (Esse não é um limite completamente estrito; portanto, se a sua solução demorar um minuto e dez segundos, tudo bem, mas se demorar 3 minutos, não será. Um bom algoritmo os resolverá facilmente em segundos.)
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Exemplos
As soluções não são exclusivas, portanto, você pode obter 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
Até onde eu sei, existem exatamente 4 soluções para cada entrada em que o número de blocos é 0 mod 3 ou 1 mod 3 e existem 0 ou 16 soluções em que é 2 mod 3.