Misalkan kita memiliki array dengan panjang dengan pointer yang menunjuk ke beberapa lokasi dalam array: Proses " pointer jumping " akan mengatur setiap pointer ke lokasi pointer menunjuk ke poin.
Untuk tujuan tantangan ini, penunjuk adalah indeks (berbasis nol) dari elemen array, ini menyiratkan bahwa setiap elemen dalam array akan lebih besar atau sama dengan dan kurang dari . Dengan menggunakan notasi ini prosesnya dapat dirumuskan sebagai berikut:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
Ini berarti (untuk tantangan ini) bahwa pointer diperbarui di tempat dalam urutan berurutan (mis. Indeks lebih rendah terlebih dahulu).
Contoh
Mari kita bekerja melalui sebuah contoh, :
Jadi setelah satu iterasi " pointer jumping " kita mendapatkan array .
Tantangan
Diberikan array dengan indeks output array yang diperoleh dengan mengulangi lompatan pointer yang dijelaskan di atas sampai array tidak berubah lagi.
Aturan
Program / fungsi Anda akan mengambil dan mengembalikan / menampilkan jenis yang sama, daftar / vektor / array dll
- dijamin tidak kosong dan
- dijamin hanya mengandung entri .
Varian: Anda dapat memilih
- untuk menggunakan pengindeksan berbasis 1 atau
- gunakan pointer aktual,
namun Anda harus menyebutkan ini dalam kiriman Anda.
Uji kasus
[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
sebagai input tambahan?
#[[#]]&~FixedPoint~#&
.