配列内のある場所を指すポインターを持つ長さ配列がとします。「ポインタージャンプ」のプロセスは、すべてのポインターを、ポインターが指す場所に設定します。
このチャレンジのために、ポインターは配列の要素の(ゼロベースの)インデックスです。これは、配列のすべての要素が以上未満であることをます。この表記を使用すると、プロセスは次のように定式化できます。
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
これは、(このチャレンジのために)ポインタが順番にインプレースで更新されることを意味します(つまり、インデックスが最初に低い)。
例
例、みましょう。
そのため、「ポインタージャンプ」を1回繰り返した後、配列を取得し。
チャレンジ
インデックスのある配列が与えられると、配列が変化しなくなるまで、上記のポインタのジャンプを繰り返して得られた配列を出力します。
ルール
あなたのプログラム/関数は、同じタイプ、リスト/ベクトル/配列などを受け取り、返し/出力します。
- 空でないことが保証され、
- エントリのみが含まれることが保証されます。
バリエーション:選択できます
- 1ベースのインデックス作成を使用する、または
- 実際のポインターを使用し、
ただし、これを提出する際に言及する必要があります。
テストケース
[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
追加の入力として長さを取ることはできますか?
#[[#]]&~FixedPoint~#&
ます。