मान लें कि हमारे पास सरणी में किसी स्थान पर इंगित करने वाले पॉइंटर्स के साथ लम्बाई की एक सरणी है : " पॉइंटर जंपिंग " की प्रक्रिया हर सूचक को उस स्थान पर इंगित करेगी जहां सूचक उस बिंदु को इंगित करता है।
इस चुनौती के उद्देश्य के लिए एक सूचक सरणी के एक तत्व का (शून्य-आधारित) सूचकांक है, इसका तात्पर्य यह है कि सरणी में प्रत्येक तत्व से अधिक या बराबर और से कम होगा । इस संकेतन का उपयोग करके प्रक्रिया को निम्नानुसार तैयार किया जा सकता है:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
इसका मतलब है (इस चुनौती के लिए) कि बिंदुओं को क्रमबद्ध क्रम में (यानी निचले सूचकांक पहले) में अपडेट किया गया है।
उदाहरण
आइए एक उदाहरण, माध्यम से काम करते हैं :
इसलिए " पॉइंटर जंपिंग " के एक पुनरावृत्ति के बाद हमें ऐरे ।
चुनौती
सूचकांकों के साथ एक सरणी को देखते हुए, उपर्युक्त वर्णित सूचक कूदते हुए सरणी प्राप्त करता है जब तक कि सरणी अब नहीं बदलती।
नियम
आपका प्रोग्राम / फंक्शन एक ही प्रकार, एक सूची / वेक्टर / एरे इत्यादि को ले / वापस करेगा
- गैर-रिक्त होने की गारंटी है और
- करने के लिए गारंटी है केवल प्रविष्टियों को ।
वेरिएंट: आप चुन सकते हैं
- 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~#&
।