Debería escribir un programa o función que dé un orden de inicio de enteros positivos distintos de un dígito y la longitud de la pista como salidas de entrada o devuelva el orden final de los números.
La entrada [5,1,2,6,7] and 14
define la siguiente raza:
--------------
76215 ->
--------------
Reglas de la carrera.
- La pista se envuelve y los dígitos pueden ir varias vueltas.
- El orden de los pasos es cíclico y se basa en la posición inicial. En nuestro ejemplo
5 1 2 6 7 5 1 2 ...
. - No puede haber múltiples dígitos en la misma posición.
Cada dígito tiene una velocidad de
digit_value
celda por paso. Adelantar un dígito o un bloque continuo de dígitos cuesta un paso adicional. Si el dígito no tiene la velocidad necesaria para eso, se detendrá antes del (bloque de) dígito (s). Ejemplos:[41 ] => [ 1 4 ] 4 overtakes 1 [2 1 ] => [ 21 ] 2 can only move 1 as it can't move 3 to overtake 1 [4 12 ] => [ 412 ] 4 can only move 1 as it can't move 5 to overtake 12 [ 3 ] => [ 3 ] 3 starting a new lap
Cada dígito tiene que dar
digit_value
vueltas antes de que termine. Se completa una vuelta cuando queda la última celda de la pista. Un dígito terminado se elimina de la pista.- Tenga en cuenta que un dígito puede alcanzar su posición inicial varias veces a través de un paso y completar varias vueltas.
Entrada
- Una lista de enteros positivos distintos de un dígito (
1..9
) con al menos un elemento y un solo entero positivo, mayor que la longitud de la lista, la longitud de la pista.
Salida
- Una lista de dígitos en el orden en que terminaron en cualquier formato inequívoco.
Ejemplos
Un ejemplo visual paso a paso para la entrada starting_order = [5,9,2] and length = 6
295 | Start position
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #1
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #1
52 9| digit 9 moves, finishing lap #2
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #3 and #4
29 5 | digit 2 moves, finishing lap #1
29 5| digit 5 moves
2 9 5| digit 9 moves, finishing lap #5
29 5| digit 2 moves
529 | digit 5 moves, finishing lap #2
52 9| digit 9 moves, finishing lap #6
5 29| digit 2 moves
529| digit 5 moves
9 52 | digit 9 moves, finishing laps #7 and #8
9 5 | digit 2 moves, finishing lap #2 --> remove 2 from the track
59 | digit 5 moves, finishing lap #3
5 | digit 9 moves, finishing lap #9 --> remove 9 from the track
5| digit 5 moves
5 | digit 5 moves, finishing lap #4
| digit 5 moves, finishing lap #5 --> remove 5 from the track
------
Finish order: 2 9 5
Ejemplos en formato Input => Output
[3], 2 => [3]
[9, 5], 3 => [9, 5]
[5, 9, 2], 6 => [2, 9, 5]
[5, 9, 2], 10 => [5, 9, 2]
[5, 7, 8, 1, 2], 10 => [1, 5, 7, 8, 2]
[5, 1, 6, 8, 3, 2], 17 => [1, 6, 8, 2, 3, 5]
[1, 2, 3, 7, 8, 9], 15 => [1, 7, 8, 9, 2, 3]
[9, 8, 7, 3, 2, 1], 15 => [8, 7, 9, 1, 2, 3]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 20 => [1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1], 20 => [8, 7, 5, 9, 6, 1, 2, 4, 3]
Este es el código de golf, por lo que gana la entrada más corta.
fuente
Respuestas:
Rubí 229
236Esta es una función que toma dos parámetros: una matriz que representa los dígitos y un int que representa la longitud de la pista. Devuelve una matriz, que representa el orden en que los dígitos terminan la carrera.
Pruébelo en línea: http://ideone.com/KyX5Yu
Editar: descubrí algunos trucos para guardar más caracteres.
Versión sin golf:
fuente
Python 2, 345 bytes
Lástima que no sea más corto que @ w0lf, pero como sea. (Tenga en cuenta que las sangrías grandes son pestañas, que se traducen en 4 espacios cuando publico).
fuente
aquí está mi código mágico acolchado
C (
457430b)Nota : necesita más mejoras ...
EDITAR: código acortado ... - sizeof (int) = 4, function = v, aún queda alguna variable que reemplazar para hacer.
fuente
sizeof
parece que esas llamadas podrían ser reemplazadas por un número mágico. Tal vez no sería tan portátil, pero bueno, este es el código golf.v(int*M,int m){e=32;f=48;u=0;l=m;char a,
... Además, casi todo ese espacio en blanco es innecesario;,V[m];for(i=0;
...)printf(
...);getch();}
.