O cenário
Depois de um longo dia de trabalho andando no escritório e navegando pelo stackexchange.com , finalmente saio pela porta às 16:58, já cansada com o dia. Como ainda sou apenas estagiário, meu modo de transporte atual é de bicicleta. Dirijo-me ao meu fiel Peugeot Reynolds 501 , mas antes que possa navegar nele, preciso desbloqueá-lo. A trava é uma trava combinada padrão de quatro dígitos (0-9), através do quadro e da roda dianteira. Enquanto tento ficar acordada, levanto minha mão para entrar na combinação.
O desafio
Como meus dedos estão cansados, quero girar a trava para a combinação correta com o menor número de movimentos. Um movimento é definido como uma rotação em uma posição (36 graus); por exemplo, há um movimento de 5737
para 5738
. No entanto, sou capaz de pegar até três toques consecutivos ao mesmo tempo e girá-los como um , o que conta apenas como um único movimento. Por exemplo, há também apenas um movimento de 5737
para 6837
ou para 5626
. Mover de 5737
para 6838
não é um movimento, pois os dígitos 1,2 e 4 se moveram na mesma direção, mas independentemente do número 3.
Portanto, para uma determinada combinação que posso ver no bloqueio da bicicleta (qualquer número inteiro de 4 dígitos), qual é o menor número de movimentos que posso fazer para desbloqueá-lo e, sim, posso girar em qualquer direção a qualquer momento. Com isso, quero dizer que posso girar alguns dígitos em uma direção e outros dígitos na outra direção: nem todos os meus movimentos serão no sentido anti-horário ou horário para cada desbloqueio.
Por ser preguiçoso, meu código de desbloqueio é 0000.
Este é um código de golfe. Não posso me incomodar em escrever muito código; portanto, o programa mais curto em número de bytes vence.
A entrada é de stdin, e seu código deve gerar as combinações que posso ver em cada etapa após cada movimento, incluindo o 0000 no final. Cada uma das combinações de saída deve ser separada por um espaço / nova linha / vírgula / ponto / e comercial.
Exemplos
Input: 1210
0100
0000
Input: 9871
9870
0980
0090
0000
Input: 5555
4445&3335&2225&1115&0005&0006&0007&0008&0009&0000
Input: 1234
0124 0013 0002 0001 0000
Tentei postar isso em http://bicycles.stackexchange.com , mas eles não gostaram ...
Isenção de responsabilidade: primeiro golfe, então qualquer coisa que esteja quebrada / qualquer informação faltante me avise! Também fiz todos os exemplos à mão, para que haja soluções que envolvam menos movimentos!
EDIT: Para respostas que possuem vários caminhos de solução com número igual de movimentos (praticamente todos), não há solução preferida.