Dada una secuencia de enteros o, para ser más específicos, una permutación de 0..N
transformar esta secuencia de la siguiente manera:
- salida [x] = reversa (entrada [entrada [x]])
- repetir
Por ejemplo: se [2,1,0]
convierte [0,1,2]
y se invierte es [2,1,0]
. [0,2,1]
se convierte [0,1,2]
y se invierte [2,1,0]
.
Ejemplo 1
In: 0 1 2
S#1: 2 1 0
S#2: 2 1 0
Output: 1
Ejemplo 2
In: 2 1 0
S#1: 2 1 0
Output: 0
Ejemplo 3
In: 3 0 1 2
S#1: 1 0 3 2
S#2: 3 2 1 0
S#3: 3 2 1 0
Output: 2
Ejemplo 4
In: 3 0 2 1
S#1: 0 2 3 1
S#2: 2 1 3 0
S#3: 2 0 1 3
S#4: 3 0 2 1
Output: 3
Su tarea es definir una función (o programa) que tome una permutación de enteros 0..N
y devuelva (o produzca) el número de pasos hasta que ocurra una permutación que ya ha ocurrido. Si se X
transforma a, X
entonces la salida debería ser cero, si se X
transforma a Y
y Y
hacia X
(o Y
), entonces la salida debería ser 1.
Y -> Y: 0 steps
Y -> X -> X: 1 step
Y -> X -> Y: 1 step
A -> B -> C -> D -> C: 3 steps
A -> B -> C -> D -> A: 3 steps
A -> B -> C -> A: 2 steps
A -> B -> C -> C: 2 steps
A -> B -> C -> B: also 2 steps
Casos de prueba:
4 3 0 1 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
4 3 2 1 0 -> 4 3 2 1 0: 0 steps
4 3 1 2 0 -> 4 1 3 2 0 -> 4 3 2 1 0 -> 4 3 2 1 0: 2 steps
1 2 3 0 4 -> 4 1 0 3 2 -> 0 3 4 1 2 -> 4 3 2 1 0 -> 4 3 2 1 0: 3 steps
5 1 2 3 0 4 -> 0 5 3 2 1 4 -> 1 5 3 2 4 0 -> 1 4 3 2 0 5 ->
5 1 3 2 0 4 -> 0 5 3 2 1 4: 4 steps
Si su idioma no admite "funciones", puede suponer que la secuencia se da como una lista separada de espacios enteros en blanco, como 0 1 2
o 3 1 0 2
en una sola línea.
Hechos graciosos:
- la secuencia 0,1,2,3, .., N siempre se transformará en N, ..., 3,2,1,0
- la secuencia N, .., 3,2,1,0 siempre se transformará en N, .., 3,2,1,0
- la secuencia 0,1,3,2, ..., N + 1, N siempre se transformará en N, ..., 3,2,1,0
Tarea adicional : averiguar una fórmula matemática.
Reglas opcionales :
- Si el primer índice de su idioma es 1 en lugar de 0, puede usar permutaciones
1..N
(puede agregar uno a cada número entero en el ejemplo y en los casos de prueba).
3,0,1,2
debe transformar a2,3,0,1
Respuestas:
JavaScript (ES6), 54 bytes
Pruébalo en línea!
fuente
[]
en una función?g[a]
se puede utilizar para acceder a la propiedada
.g
para almacenar el estado en.Python 2 , 67 bytes
Pruébalo en línea!
fuente
Pyth,
1098 bytesExplicación:
Banco de pruebas .
fuente
Haskell, 52 bytes
Pruébalo en línea!
fuente
Perl 6 ,
4435 bytes-9 bytes gracias a nwellnhof
Pruébalo en línea!
Explicación:
fuente
J,
332726 bytes-7 gracias a bubbler
Pruébalo en línea!
cómo
explicación original mi última mejora solo cambia la pieza que encuentra "el índice del primer elemento que ya hemos visto". ahora usa el "tamiz de nubes" para hacerlo en menos bytes.
Tenga en cuenta que toda la frase final
1<:@i.~[:({:e.}:)\
está dedicada a encontrar "el índice del primer elemento que ya se ha visto". Esto parece terriblemente largo para obtener eso, pero no pude jugar más al golf. Sugerencias de bienvenida.fuente
Jalea , 6 bytes
Pruébalo en línea!
1 indexado.
fuente
Dyalog APL,
292827 bytesToma matrices en caja. Entrenará y explicará más tarde.
Pruébelo aquí como un conjunto de pruebas .
fuente
Limpio , 90 bytes
Pruébalo en línea!
fuente