आपका लक्ष्य एक फ़ंक्शन या एक प्रोग्राम बनाना है जो पूर्णांक एन की संख्या में बिट्स को रिवर्स करने के लिए एक पूर्णांक देता है । दूसरे शब्दों में, आप 2- एन आइटम, शून्य-अनुक्रमित की श्रेणी के बिट-उलट क्रमांकन को ढूंढना चाहते हैं । यह OEIS अनुक्रम A030109 भी है । इस प्रक्रिया का उपयोग अक्सर फास्ट फूरियर ट्रांसफॉर्म की गणना करने के लिए किया जाता है, जैसे कि एफएफटी के लिए इन-प्लेस कोइली-टुकी एल्गोरिथ्म। अनुक्रमों के लिए एफएफटी की गणना के लिए एक चुनौती भी है जहां लंबाई 2 की शक्ति है।
इस प्रक्रिया के लिए आपको सीमा [0, 2 n -1] पर पुनरावृति करना और प्रत्येक मान को द्विआधारी में परिवर्तित करना और बिट्स को उस मूल्य में परिवर्तित करना है। आप प्रत्येक मान को आधार 2 में n -digit संख्या के रूप में मानेंगे जिसका अर्थ है कि अंतिम n बिट्स के बीच केवल उलटा होगा ।
उदाहरण के लिए, यदि n = 3, पूर्णांक की सीमा है [0, 1, 2, 3, 4, 5, 6, 7]
। य़े हैं
i Regular Bit-Reversed j
0 000 000 0
1 001 100 4
2 010 010 2
3 011 110 6
4 100 001 1
5 101 101 5
6 110 011 3
7 111 111 7
जहां प्रत्येक इंडेक्स i को बिट-रिवर्सल का उपयोग करके इंडेक्स जे में परिवर्तित किया जाता है । इसका मतलब है कि आउटपुट है [0, 4, 2, 6, 1, 5, 3, 7]
।
N के लिए आउटपुट 0 के माध्यम से 4 हैं
n Bit-Reversed Permutation
0 [0]
1 [0, 1]
2 [0, 2, 1, 3]
3 [0, 4, 2, 6, 1, 5, 3, 7]
आपने एक पैटर्न बनाने पर गौर किया होगा। N को देखते हुए , आप n -1 के लिए पिछले अनुक्रम को ले सकते हैं और इसे दोगुना कर सकते हैं। फिर उस दोहरे सूची को उसी डबल सूची में संक्षिप्त करें लेकिन एक के बाद एक वृद्धि। दिखाना,
[0, 2, 1, 3] * 2 = [0, 4, 2, 6]
[0, 4, 2, 6] + 1 = [1, 5, 3, 7]
[0, 4, 2, 6] ⊕ [1, 5, 3, 7] = [0, 4, 2, 6, 1, 5, 3, 7]
जहां ⊕
संघटन का प्रतिनिधित्व करता है।
अपना समाधान बनाने के लिए आप ऊपर दिए गए दो तरीकों का उपयोग कर सकते हैं। यदि आप एक बेहतर तरीका जानते हैं, तो आप उसका उपयोग करने के लिए स्वतंत्र हैं। कोई भी तरीका ठीक है जब तक कि वह सही परिणाम नहीं देता।
नियम
- यह कोड-गोल्फ है इसलिए सबसे छोटा समाधान जीतता है।
- इस चुनौती को एक पूरे के रूप में हल करने वाले बिल्डरों और एक मूल्य के बिट-उलट गणना करने वाले बिल्डरों की अनुमति नहीं है। इसमें ऐसे बाइनरी शामिल नहीं हैं जो द्विआधारी रूपांतरण या अन्य बिटवाइज़ ऑपरेशन करते हैं।
- आपका समाधान 0 से 31 तक n के लिए कम से कम मान्य होना चाहिए ।
0
इसके बजाय प्रिंट कर सकते हैं [0]
या इसकी सूची होनी चाहिए?
IntegerReverse[Range[2^#]-1,2,#]&
,। (मुझे नहीं पता कि गणितज्ञ को उस अंतर्निहित की आवश्यकता क्यों है , लेकिन मुझे लगता है कि यहSunset
... की तुलना में बहुत अधिक अजीब नहीं है )