La escena es:
Peter está en el gimnasio con su amigo Brian cuando de repente Brian necesita urgentemente su inhalador. Brian logra decirle a Peter el código de su cerradura de combinación antes de que caiga al suelo.
En el momento en que Peter llega al casillero de Brian y ve lo que señala el indicador, Stewie lo embosca y rocía una lata llena de spray de pimienta en su cara, cegando a Peter.
Peter ahora debe intentar abrir la cerradura sin mirarla. Comienza a girar el dial hacia la derecha, contando los números mientras los pasa. Luego, en el número correcto, comienza a girar el dial hacia la izquierda, sigue contando, y finalmente lo gira hacia la derecha hasta que se abre la cerradura.
El reto:
Escriba una función / programa que tome dos entradas, la combinación de Brian y la posición del indicador. Saca los números que Peter tiene que contar.
Reglas:
- La combinación y la posición del indicador deben ser argumentos separados.
- La entrada puede ser desde el símbolo del sistema o como argumentos de función.
- La salida debe imprimirse en la pantalla / mostrarse de otro modo (no en el archivo)
- Suponga que la posición inicial no es la misma que el primer número, y que los tres números en la combinación son únicos
- Es la cerradura que se muestra en la imagen a continuación, con posibles números: 0-39.
Instrucciones:
Para abrir el bloqueo a continuación, debe seguir un conjunto de instrucciones:
- Debes saber tu código. Supongamos que es (38, 16, 22) por ahora.
- Gire el dial 3 veces hacia la derecha (pasando el número inicial tres veces), luego deténgase cuando el primer número (38) se alinee con el indicador
- Gire el dial 1 vuelta completa hacia la izquierda, pasando el primer número y pare cuando el segundo número (16) se alinee con el indicador.
- Gire el dial hacia la derecha y pare cuando el tercer número (22) se alinee con el indicador
- Tire de la cerradura hacia abajo
Ejemplo:
Input
38 16 22
33
Output
33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22
Se aplican reglas estándar de golf de código.
Las soluciones que se publican más tarde aún pueden ganar si son más cortas que la respuesta de Dennis.
function combination(code){alert("Help! Someone open this locker, the combination is "+code+"!")}
Respuestas:
CJam,
5239 bytesPruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Groovy,
189175 bytesAsume que el indicador se pasa como arg0 y el combo se pasa como arg1, arg2 y arg3 en la línea de comando ...
fuente
Perl 5 , 129 + 1 (-a) = 130 bytes
Pruébalo en línea!
¿Cómo?
fuente
Python 2, 262 bytes
Se siente tan largo. Pero también están sucediendo muchas cosas.
Pruébalo en línea!
Creo que puedo concatenar algunas partes mejor en mi última línea, pero todavía soy nuevo en el código de golf y no sé cómo abordar esa combinación de lista de una manera corta.
¿Alguna idea sobre cómo mejorar esto?
fuente
Haskell ,
135112 bytesPruébalo en línea!
Guardado 23 bytes gracias a Laikoni
fuente
l s t=
declarando un operador infijo en sus#t=
lugar. También funciona desde hace más de dos argumentos:(a%b)c s=
.s+1
.