Supongamos que tenemos una matriz de longitud con punteros que apuntan a alguna ubicación en la matriz: el proceso de " salto de puntero " establecerá cada puntero en la ubicación a la que apunta.
Para el propósito de este desafío, un puntero es el índice (basado en cero) de un elemento de la matriz, esto implica que cada elemento de la matriz será mayor o igual a y menor que . Usando esta notación, el proceso puede formularse de la siguiente manera:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
Esto significa (para este desafío) que los punteros se actualizan in situ en orden secuencial (es decir, primero los índices más bajos).
Ejemplo
Analicemos un ejemplo, :
Entonces, después de una iteración de " salto de puntero " obtenemos la matriz .
Reto
Dada una matriz con salida de índices, la matriz obtenida iterando el puntero descrito anteriormente saltando hasta que la matriz ya no cambie.
Reglas
Su programa / función tomará y devolverá / generará el mismo tipo, una lista / vector / matriz, etc., que
- se garantiza que no está vacío y
- se garantiza que solo contiene entradas .
Variantes: puedes elegir
- utilizar indexación basada en 1 o
- usar punteros reales,
Sin embargo, debe mencionar esto en su presentación.
Casos de prueba
[0] → [0]
[1,0] → [0,0]
[1,2,3,4,0] → [2,2,2,2,2]
[0,1,1,1,0,3] → [0,1,1,1,0,1]
[4,1,3,0,3,2] → [3,1,3,3,3,3]
[5,1,2,0,4,5,6] → [5,1,2,5,4,5,6]
[9,9,9,2,5,4,4,5,8,1,0,0] → [1,1,1,1,4,4,4,4,8,1,1,1]
n
como entrada adicional?
#[[#]]&~FixedPoint~#&
.