संख्याओं के साथ डूडलिंग करते समय, मुझे एक दिलचस्प क्रमपरिवर्तन मिला जिसे आप संख्याओं की सूची से उत्पन्न कर सकते हैं। यदि आप इसी क्रमबद्धता को पर्याप्त बार दोहराते हैं, तो आप हमेशा मूल सरणी पर वापस आ जाएंगे। निम्नलिखित सूची का उपयोग करते हैं:
[1, 2, 3, 4, 5]
उदहारण के लिए
सरणी को उल्टा करें। अब हमारी सरणी है
[5, 4, 3, 2, 1]
प्रत्येक जोड़ी को पुन: क्रमबद्ध (स्वैप) करें । हमारी सूची में 2 जोड़े हैं:
[5, 4]
और[3, 2]
। दुर्भाग्य से, हम1
एक जोड़ी में समूह नहीं बना सकते हैं , इसलिए हम इसे स्वयं छोड़ देंगे। प्रत्येक जोड़ी को स्वैप करने के बाद, नया सरणी है:[4, 5, 2, 3, 1]
चरण 1 और 2 को तब तक दोहराएं जब तक हम मूल सरणी पर वापस नहीं आ जाते। यहां अगले 4 चरण दिए गए हैं:
Step 2: Start: [4, 5, 2, 3, 1] Reversed: [1, 3, 2, 5, 4] Pairs Swapped: [3, 1, 5, 2, 4] Step 3: Start: [3, 1, 5, 2, 4] Reversed: [4, 2, 5, 1, 3] Pairs Swapped: [2, 4, 1, 5, 3] Step 4: Start: [2, 4, 1, 5, 3] Reversed: [3, 5, 1, 4, 2] Pairs Swapped: [5, 3, 4, 1, 2] Step 5: Start: [5, 3, 4, 1, 2] Reversed: [2, 1, 4, 3, 5] Pairs Swapped: [1, 2, 3, 4, 5] # No more steps needed because we are back to the original array
यदि सूची की लंबाई, n विषम है, तो मूल सरणी पर लौटने के लिए हमेशा n कदम उठाएंगे। यदि n सम है, तो मूल सरणी पर वापस जाने के लिए हमेशा 2 चरण होंगे, जब तक n 2 नहीं है, इस स्थिति में इसे 1 चरण लगेगा (क्योंकि उलट और स्वैप करना एक ही बात है)।
आज के लिए आपका काम (आपको इसे स्वीकार करना चाहिए) मनमाने ढंग से लंबाई की सूची के लिए चरणों के इस सेट की कल्पना करना है। आपको एक प्रोग्राम या फ़ंक्शन लिखना चाहिए जो इनपुट के रूप में एक एकल सकारात्मक पूर्णांक n लेता है , और यह सूची के लिए चरणों का सेट करता है [1, n]
। आपको प्रत्येक मध्यवर्ती चरण को रास्ते में आउटपुट करना होगा, चाहे इसका अर्थ है कि प्रत्येक चरण को प्रिंट करना, या उन सभी को चरणों की सूची के रूप में वापस करना। मैं आउटपुट प्रारूप के बारे में बहुत चुस्त नहीं हूँ, जब तक कि यह स्पष्ट है कि आप हर कदम पैदा कर रहे हैं। इसका मतलब है (उदाहरण के लिए) इनमें से कोई भी:
STDOUT की सूची के रूप में हर कदम का आउटपुट
सूचियों की सूची वापस करना
प्रत्येक चरण के स्ट्रिंग निरूपण की सूची लौटाते हुए
मैट्रिक्स को वापस करना / आउटपुट करना
स्वीकार्य होगा।
आपको मूल सरणी को भी आउटपुट करना होगा, चाहे वह अंत में आए या शुरुआत में आपके ऊपर हो। (तकनीकी रूप से, दोनों सही हैं)
आपको 2 के बजाय 1 कदम उठाने के 2 के किनारे मामले को संभालना होगा , इसलिए कृपया सुनिश्चित करें कि आपका समाधान 2 के इनपुट के साथ काम करता है (और 1 एक और संभावित किनारे का मामला है)।
हमेशा की तरह, यह कोड-गोल्फ है , इसलिए मानक खामियां लागू होती हैं, और अपने समाधान को अपनी पसंद की भाषा में किसी अन्य की तुलना में कम करने की कोशिश करें (या किसी अन्य भाषा को हरा देने की कोशिश करें जो आमतौर पर आपकी तुलना में कम है यदि आप महसूस कर रहे हैं एक चुनौती के लिए)।
परीक्षण IO
1:
[1]
2:
[1, 2]
3:
[2, 3, 1]
[3, 1, 2]
[1, 2, 3]
4:
[3, 4, 1, 2]
[1, 2, 3, 4]
5:
[4, 5, 2, 3, 1]
[3, 1, 5, 2, 4]
[2, 4, 1, 5, 3]
[5, 3, 4, 1, 2]
[1, 2, 3, 4, 5]
7:
[6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 6]
[4, 6, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 7, 5]
[7, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7]
9:
[8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 8]
[6, 8, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 9, 7]
[9, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
और अच्छे उपाय के लिए, यहाँ एक विशाल परीक्षण मामला है:
27:
[26, 27, 24, 25, 22, 23, 20, 21, 18, 19, 16, 17, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1]
[3, 1, 5, 2, 7, 4, 9, 6, 11, 8, 13, 10, 15, 12, 17, 14, 19, 16, 21, 18, 23, 20, 25, 22, 27, 24, 26]
[24, 26, 22, 27, 20, 25, 18, 23, 16, 21, 14, 19, 12, 17, 10, 15, 8, 13, 6, 11, 4, 9, 2, 7, 1, 5, 3]
[5, 3, 7, 1, 9, 2, 11, 4, 13, 6, 15, 8, 17, 10, 19, 12, 21, 14, 23, 16, 25, 18, 27, 20, 26, 22, 24]
[22, 24, 20, 26, 18, 27, 16, 25, 14, 23, 12, 21, 10, 19, 8, 17, 6, 15, 4, 13, 2, 11, 1, 9, 3, 7, 5]
[7, 5, 9, 3, 11, 1, 13, 2, 15, 4, 17, 6, 19, 8, 21, 10, 23, 12, 25, 14, 27, 16, 26, 18, 24, 20, 22]
[20, 22, 18, 24, 16, 26, 14, 27, 12, 25, 10, 23, 8, 21, 6, 19, 4, 17, 2, 15, 1, 13, 3, 11, 5, 9, 7]
[9, 7, 11, 5, 13, 3, 15, 1, 17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 26, 14, 24, 16, 22, 18, 20]
[18, 20, 16, 22, 14, 24, 12, 26, 10, 27, 8, 25, 6, 23, 4, 21, 2, 19, 1, 17, 3, 15, 5, 13, 7, 11, 9]
[11, 9, 13, 7, 15, 5, 17, 3, 19, 1, 21, 2, 23, 4, 25, 6, 27, 8, 26, 10, 24, 12, 22, 14, 20, 16, 18]
[16, 18, 14, 20, 12, 22, 10, 24, 8, 26, 6, 27, 4, 25, 2, 23, 1, 21, 3, 19, 5, 17, 7, 15, 9, 13, 11]
[13, 11, 15, 9, 17, 7, 19, 5, 21, 3, 23, 1, 25, 2, 27, 4, 26, 6, 24, 8, 22, 10, 20, 12, 18, 14, 16]
[14, 16, 12, 18, 10, 20, 8, 22, 6, 24, 4, 26, 2, 27, 1, 25, 3, 23, 5, 21, 7, 19, 9, 17, 11, 15, 13]
[15, 13, 17, 11, 19, 9, 21, 7, 23, 5, 25, 3, 27, 1, 26, 2, 24, 4, 22, 6, 20, 8, 18, 10, 16, 12, 14]
[12, 14, 10, 16, 8, 18, 6, 20, 4, 22, 2, 24, 1, 26, 3, 27, 5, 25, 7, 23, 9, 21, 11, 19, 13, 17, 15]
[17, 15, 19, 13, 21, 11, 23, 9, 25, 7, 27, 5, 26, 3, 24, 1, 22, 2, 20, 4, 18, 6, 16, 8, 14, 10, 12]
[10, 12, 8, 14, 6, 16, 4, 18, 2, 20, 1, 22, 3, 24, 5, 26, 7, 27, 9, 25, 11, 23, 13, 21, 15, 19, 17]
[19, 17, 21, 15, 23, 13, 25, 11, 27, 9, 26, 7, 24, 5, 22, 3, 20, 1, 18, 2, 16, 4, 14, 6, 12, 8, 10]
[8, 10, 6, 12, 4, 14, 2, 16, 1, 18, 3, 20, 5, 22, 7, 24, 9, 26, 11, 27, 13, 25, 15, 23, 17, 21, 19]
[21, 19, 23, 17, 25, 15, 27, 13, 26, 11, 24, 9, 22, 7, 20, 5, 18, 3, 16, 1, 14, 2, 12, 4, 10, 6, 8]
[6, 8, 4, 10, 2, 12, 1, 14, 3, 16, 5, 18, 7, 20, 9, 22, 11, 24, 13, 26, 15, 27, 17, 25, 19, 23, 21]
[23, 21, 25, 19, 27, 17, 26, 15, 24, 13, 22, 11, 20, 9, 18, 7, 16, 5, 14, 3, 12, 1, 10, 2, 8, 4, 6]
[4, 6, 2, 8, 1, 10, 3, 12, 5, 14, 7, 16, 9, 18, 11, 20, 13, 22, 15, 24, 17, 26, 19, 27, 21, 25, 23]
[25, 23, 27, 21, 26, 19, 24, 17, 22, 15, 20, 13, 18, 11, 16, 9, 14, 7, 12, 5, 10, 3, 8, 1, 6, 2, 4]
[2, 4, 1, 6, 3, 8, 5, 10, 7, 12, 9, 14, 11, 16, 13, 18, 15, 20, 17, 22, 19, 24, 21, 26, 23, 27, 25]
[27, 25, 26, 23, 24, 21, 22, 19, 20, 17, 18, 15, 16, 13, 14, 11, 12, 9, 10, 7, 8, 5, 6, 3, 4, 1, 2]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
मज़ा गोल्फ है!
1 2 3 4 5
, नहीं 1 2 4 3 5
।
array[0]
प्रक्रिया के प्रारंभ और अंत में केवल 1 होगा n = 999
। पैटर्न को देखने से ऐसा लगता है कि हर विषम n के लिए , पहला तत्व 1, n-1, 3, n - 3, 5, n - 5, 7...
ऊपर तक जाता है n - 2, 3, n, 1
, जो हमेशा n कदम उठाएगा। मुझे कोई कारण नहीं दिखता कि यह पैटर्न बड़े n के साथ बदले ।
1, n, 2, n-2, 4, n-4, 6, n-6, 8, n-8, ...
और प्रेरण द्वारा यह दिखाना आसान है कि एक स्थिति x पर एक तत्व एक कदम के बाद nx पर चला जाता है , और अजीब स्थिति में एक तत्व x करने के लिए ले जाता है एन-x + 2 । इसलिए यदि n = 2k + 1 है , तो 2k के बाद 1-चरण 2k पर होगा , और अगले चरण पर n-2k = 1 होगा ।