Has bloqueado tu bicicleta con un candado de combinación de 3 dígitos. Ahora quieres dar un paseo y debes desbloquearlo con la ayuda del siguiente programa.
Entrada
1er parámetro
La combinación de dígitos de su bloqueo en estado bloqueado . Debe ser diferente del segundo parámetro (= la combinación del estado desbloqueado ). (¡De lo contrario, su bicicleta podría ser robada!)
Rango 000..999. Los ceros iniciales no deben omitirse.
2do parámetro
La combinación de dígitos de su bloqueo en estado desbloqueado . Este valor es tu objetivo.
Rango 000..999. Los ceros iniciales no deben omitirse.
Salida
Una lista de cada estado del bloqueo de combinación después de cada "rotación" que incluye el estado inicial (que siempre es el primer parámetro) y el último paso (que siempre es el segundo parámetro).
Algoritmo
Usted comienza a "rotar" el primer dígito uno por uno hasta llegar al dígito correcto en estado desbloqueado . Pero, como conoce el código de desbloqueo completo, gira el dígito en la dirección en la que necesita la menor cantidad de rotaciones para alcanzar el dígito en estado desbloqueado . En caso de empate, puede elegir la dirección que prefiera.
Cuando haya alcanzado el primer dígito correcto, comenzará el mismo procedimiento con el segundo y luego con el tercero.
El orden de los dígitos es entender como un círculo:
... 9 0 1 2 3 4 5 6 7 8 9 0 1 2 ...
Esto significa que la menor cantidad de rotaciones de 1 a 9 no es
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
= 8
pero
1 -> 0 -> 9
= 2.
Notas
- Puede confiar en las reglas de E / S predeterminadas
- Puede cambiar el orden de los parámetros.
Ejemplos
Ejemplo 1, correcto
Input: 999 001
Output:
999
099
009
000
001
Ejemplo 2, correcto
Input: 000 292
Output:
000
100
200
290
291
292
Ejemplo 3, salida incorrecta
Input: 999 121
Wrong output:
999
899 // Wrong because wrong rotation direction.
799
699
...
Correct output:
999
099
199
109
119
129
120
121
Ejemplo 4, entrada incorrecta
Input: 1 212 // Wrong because no leading zeros.
Este es el código de golf que gana la respuesta más corta.
fuente
Respuestas:
Python 2 ,
1131071059995 bytesPruébalo en línea!
Toma datos como listas de enteros
Salvado:
fuente
//
Jalea , 15 bytes
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6),
73 7270 bytesGuardado 2 bytes gracias a @tsh
Toma la entrada como 2 matrices de dígitos en sintaxis curry
(a)(b)
. Devuelve una cadena.Pruébalo en línea!
Comentado
fuente
d/6&1^d>0||9
->d/5>5/d?9:1
Jalea , 25 bytes
Pruébalo en línea!
Programa completo
fuente
Python 2 ,
10197 bytesPruébalo en línea!
3 bytes gracias a Joel .
Toma datos como listas de entradas.
fuente
//
es lo mismo que/
, por lo que se obtiene un byte adicional.for x,y,i in zip(a,c,[0,1,2])
si recuerdo ...Jalea , 30 bytes
Pruébalo en línea!
Un enlace diádico que toma como argumento izquierdo el código de desbloqueo y a la derecha el estado bloqueado actual, ambos como listas de enteros.
¡Esto se siente demasiado tiempo!
fuente
PHP , 114 bytes
Pruébalo en línea!
Mi solución probablemente apesta, ¡pero eso es lo mejor que puedo pensar por ahora!
fuente
Carbón , 48 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Imprime la posición inicial.
Cambie la cadena de posición inicial en una matriz de dígitos numéricos para fines de cálculo.
Pase sobre cada dígito a su vez.
Calcule la cantidad de rotaciones necesarias para desbloquear ese dígito. Este es un número de
-5
a4
donde-5
significa 5 rotaciones hacia abajo y4
medios 4 rotaciones hacia arriba.Pase sobre cada rotación.
Actualice el dígito de acuerdo con el signo de la rotación.
Imprima los dígitos como una cadena en una nueva línea.
fuente
T-SQL 2008, 170 bytes
Agregué algunos saltos de línea para que sea legible
Pruébalo en línea
fuente
C # (compilador interactivo de Visual C #) , 101 bytes
Pruébalo en línea!
fuente
J , 36 bytes
Pruébalo en línea!
Agregará explicación mañana.
fuente
MATLAB,
10089 bytesUn enfoque diferente (usando la expansión implícita para crear una matriz de resta) reduce 11 bytes:
[Solución original de 100 bytes]
Ambos llamados pasando las entradas como matrices de 3 elementos, por ejemplo
f([9 1 1], [2 3 2])
fuente
Java (JDK) , 139 bytes
Pruébalo en línea!
¡El mismo algoritmo que todos, funcionó de manera diferente porque el de Java
System.out.println
es bastante costoso!fuente
C (clang) , 125 bytes
Pruébalo en línea!
fuente
Kotlin , 162 bytes
Pruébalo en línea!
fuente