Giả sử chúng ta có một mảng có độ dài với các con trỏ trỏ đến một số vị trí trong mảng: Quá trình " nhảy con trỏ " sẽ đặt mọi con trỏ tới vị trí mà con trỏ trỏ tới.
Với mục đích của thử thách này, một con trỏ là chỉ số (dựa trên zero) của một phần tử của mảng, điều này ngụ ý rằng mọi phần tử trong mảng sẽ lớn hơn hoặc bằng và nhỏ hơn . Sử dụng ký hiệu này, quy trình có thể được xây dựng như sau:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
Điều này có nghĩa (đối với thách thức này) rằng các con trỏ được cập nhật tại chỗ theo thứ tự liên tiếp (nghĩa là các chỉ số thấp hơn trước).
Thí dụ
Chúng ta hãy làm việc qua một ví dụ, :
Vì vậy, sau một lần lặp lại " nhảy con trỏ ", chúng ta sẽ nhận được mảng .
Thử thách
Đưa ra một mảng với các chỉ số đầu ra, mảng thu được bằng cách lặp lại bước nhảy được mô tả ở trên cho đến khi mảng không thay đổi nữa.
Quy tắc
Chương trình / hàm của bạn sẽ lấy và trả về / xuất cùng loại, một danh sách / vector / mảng, v.v.
- được đảm bảo không trống và
- được đảm bảo chỉ chứa các mục .
Các biến thể: Bạn có thể chọn
- để sử dụng lập chỉ mục dựa trên 1 hoặc
- sử dụng con trỏ thực tế,
tuy nhiên bạn nên đề cập đến điều này trong bài nộp của bạn.
Các trường hợp thử nghiệm
[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
làm đầu vào bổ sung không?
#[[#]]&~FixedPoint~#&
.