আপনার লক্ষ্য হ'ল একটি পূর্ণসংখ্যা n প্রদত্ত পূর্ণসংখ্যার ব্যাপ্তিতে বিটগুলি বিপরীত করার জন্য একটি ক্রিয়াকলাপ বা একটি প্রোগ্রাম তৈরি করা । অন্য কথায়, আপনি খুঁজে পেতে চান বিট-উলটাপালটা বিন্যাস 2 একটি ব্যাপ্তির এন আইটেম, শূন্য-ইন্ডেক্স। এটি ওইআইএস সিকোয়েন্স এ 030109 । এই প্রক্রিয়াটি প্রায়শই এফএফটির জন্য স্থান-স্থান কুলি-টুকি অ্যালগোরিদমের মতো দ্রুত ফুউরিয়ার ট্রান্সফর্মগুলি কম্পিউটিংয়ে ব্যবহৃত হয়। দৈর্ঘ্য 2 হ'ল সিকোয়েন্সগুলির জন্য এফএফটি গণনা করার জন্যও একটি চ্যালেঞ্জ রয়েছে ।
এই প্রক্রিয়াটির জন্য আপনাকে [0, 2 এন -1] এর পরিসীমাটি পুনরাবৃত্তি করতে হবে এবং প্রতিটি মানকে বাইনারি রূপান্তর করতে হবে এবং সেই মানটিতে বিটগুলি বিপরীত করতে হবে। আপনি বেস 2-তে প্রতিটি মানকে একটি এন- ডিজিট সংখ্যা হিসাবে বিবেচনা করবেন যার অর্থ বিপরীতটি কেবল সর্বশেষ এন বিটগুলির মধ্যেই ঘটবে ।
উদাহরণস্বরূপ, যদি এন = 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]
।
0 থেকে 4 এর মধ্যে n এর আউটপুট
n Bit-Reversed Permutation
0 [0]
1 [0, 1]
2 [0, 2, 1, 3]
3 [0, 4, 2, 6, 1, 5, 3, 7]
আপনি একটি প্যাটার্ন গঠনের বিষয়টি লক্ষ্য করেছেন। এন দেওয়া হয়েছে , আপনি 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]
যেখানে ⊕
উপসংহারের প্রতিনিধিত্ব করে।
আপনার সমাধান গঠনের জন্য আপনি উপরের দুটি পদ্ধতির মধ্যে দুটি ব্যবহার করতে পারেন। আপনি যদি আরও ভাল উপায় জানেন তবে আপনিও এটি ব্যবহার করতে মুক্ত। যেকোন পদ্ধতি ততক্ষণ ঠিক থাকে যতক্ষণ না এটি সঠিক ফলাফল দেয়।
বিধি
- এটি কোড-গল্ফ তাই সংক্ষিপ্ততম সমাধানটি জয়লাভ করে।
- বিল্টিনগুলি যা পুরো এই চ্যালেঞ্জকে সমাধান করে এবং বিল্টিনগুলি যা কোনও মানের বিট-রিভার্সাল গণনা করে তা অনুমোদিত নয়। এটিতে বিল্টিনগুলি অন্তর্ভুক্ত নয় যা বাইনারি রূপান্তর বা অন্যান্য বিটওয়াইজ অপারেশন করে perform
- আপনার সমাধানটি অবশ্যই কমপক্ষে 0 থেকে 31 এর n এর জন্য বৈধ হতে হবে ।
0
পরিবর্তে মুদ্রণ করতে পারি [0]
বা এটি একটি তালিকা হতে হবে?
IntegerReverse[Range[2^#]-1,2,#]&
। (আমি জানি না কেন ম্যাথামেটিকাকে সেই অন্তর্নির্মিত প্রয়োজন তবে আমি অনুমান করি যে এটি এর চেয়ে খুব বেশি অযৌক্তিক নয়Sunset
...)