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.
fonte
Respostas:
Python 2 ,
1131071059995 bytesExperimente online!
Recebe entrada como listas de números inteiros
Salvou:
fonte
//
Gelatina , 15 bytes
Experimente online!
Quão?
fonte
JavaScript (ES6),
73 7270 bytesGuardado 2 bytes graças a @tsh
Recebe a entrada como 2 matrizes de dígitos na sintaxe ao curry
(a)(b)
. Retorna uma string.Experimente online!
Comentado
fonte
d/6&1^d>0||9
->d/5>5/d?9:1
Gelatina , 25 bytes
Experimente online!
Programa completo.
fonte
Python 2 ,
10197 bytesExperimente online!
3 bytes thx para Joel .
Recebe entradas como listas de entradas.
fonte
//
é o mesmo/
, então há um byte adicional ganho.for x,y,i in zip(a,c,[0,1,2])
se bem me lembro ...Gelatina , 30 bytes
Experimente online!
Um link diádico que toma como argumento esquerdo o código de desbloqueio e o estado bloqueado atual, ambos como listas de números inteiros.
Parece demais!
fonte
PHP , 114 bytes
Experimente online!
Minha solução provavelmente é péssima, mas é o melhor que consigo pensar por enquanto!
fonte
Carvão , 48 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Imprima a posição inicial.
Altere a string da posição inicial em uma matriz de dígitos numéricos para fins de cálculo.
Faça um loop sobre cada dígito por vez.
Calcule o número de rotações necessárias para desbloquear esse dígito. Este é um número a partir de
-5
a4
, onde-5
significa 5 rotações para baixo e4
meios 4 rotações para cima.Faça um loop sobre cada rotação.
Atualize o dígito de acordo com o sinal da rotação.
Produza os dígitos como uma sequência em uma nova linha.
fonte
T-SQL 2008, 170 bytes
Adicionei algumas quebras de linha para torná-lo legível
Experimente online
fonte
C # (compilador interativo do Visual C #) , 101 bytes
Experimente online!
fonte
J , 36 bytes
Experimente online!
Adicionará explicação amanhã.
fonte
MATLAB,
10089 bytesUma abordagem diferente (usando expansão implícita para criar uma matriz de subtração) reduz 11 bytes:
[Solução original de 100 bytes]
Ambos chamados passando as entradas como matrizes de 3 elementos, por exemplo
f([9 1 1], [2 3 2])
fonte
Java (JDK) , 139 bytes
Experimente online!
O mesmo algoritmo que todos, rolou de maneira diferente porque o Java
System.out.println
é muito caro!fonte
C (clang) , 125 bytes
Experimente online!
fonte
Kotlin , 162 bytes
Experimente online!
fonte