Você bloqueou sua bicicleta com uma trava combinada de 3 dígitos. Agora você quer dar um passeio e precisa desbloqueá-lo com a ajuda do programa a seguir.
Entrada
1º parâmetro
A combinação de dígitos do seu bloqueio no estado bloqueado . Ele deve ser diferente do segundo parâmetro (= a combinação do estado desbloqueado ). (Ou sua bicicleta pode ser roubada!)
Intervalo 000..999. Os zeros à esquerda não devem ser omitidos.
Segundo parâmetro
A combinação de dígitos do seu bloqueio no estado desbloqueado . Esse valor é seu objetivo.
Intervalo 000..999. Os zeros à esquerda não devem ser omitidos.
Saída
Uma lista de cada estado do bloqueio de combinação após cada "rotação", incluindo o estado inicial (que é sempre o 1º parâmetro) e a última etapa (que é sempre o 2º paramater).
Algoritmo
Você começa a "girar" o primeiro dígito, um por um, até atingir o dígito correto no estado desbloqueado . Mas, como você conhece todo o código de desbloqueio, você gira o dígito na direção em que precisa da menor quantidade de rotações para alcançar o dígito no estado desbloqueado . Em caso de empate, você pode escolher a direção que preferir.
Quando você alcança o primeiro dígito correto, inicia o mesmo procedimento com o 2º e depois com o 3º.
A ordem dos dígitos é entender como um círculo:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Isso significa que a menor quantidade de rotações de 1 a 9 não é
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
mas
1 -> 0 -> 9
= 2.
Notas
- Você pode confiar nas regras de E / S padrão
- Você pode alterar a ordem dos parâmetros.
Exemplos
Exemplo 1, correto
Input: 999 001
Output:
999
099
009
000
001
Exemplo 2, correto
Input: 000 292
Output:
000
100
200
290
291
292
Exemplo 3, saída incorreta
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Exemplo 4, entrada incorreta
Input: 1 212 // Wrong because no leading zeros.
Este é o código-golfe que a resposta mais curta ganha.