Supponiamo di avere un array di lunghezza con puntatori che indicano una posizione nell'array: il processo di " salto del puntatore " imposterà ogni puntatore sulla posizione a cui punta il puntatore.
Ai fini di questa sfida un puntatore è l'indice (a base zero) di un elemento dell'array, ciò implica che ogni elemento dell'array sarà maggiore o uguale a e minore di . Usando questa notazione il processo può essere formulato come segue:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
Ciò significa (per questa sfida) che i puntatori vengono aggiornati sul posto in ordine sequenziale (cioè prima gli indici inferiori).
Esempio
Analizziamo un esempio, :
Quindi dopo una ripetizione di " puntatore che salta " otteniamo l'array .
Sfida
Dato un array con indici in uscita, l'array ottenuto ripetendo il puntatore sopra descritto saltando fino a quando l'array non cambia più.
Regole
Il tuo programma / funzione prenderà e restituirà / emetterà lo stesso tipo, un elenco / vettore / matrice ecc. Quale
- è garantito per essere non vuoto e
- è garantito che contenga solo voci .
Varianti: puoi scegliere
- per utilizzare l'indicizzazione basata su 1 o
- utilizzare puntatori effettivi,
tuttavia dovresti menzionarlo nella tua richiesta.
Casi test
[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
come input aggiuntivo?
#[[#]]&~FixedPoint~#&
.