ধরুন আমাদের কাছে সংখ্যার একটি তালিকা আছে। আমাদের প্রতিটি সংখ্যার জন্য বাইনারি উপস্থাপনায় উপস্থিত 1s সংখ্যা দ্বারা ক্রমবর্ধমান ক্রমে তালিকাটি সাজাতে হবে। যদি দুটি সংখ্যার একই সংখ্যা 1s হয়, তাহলে তাদের মানের উপর ভিত্তি করে সাজান।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[4, 1, 12, 7, 6], তাহলে আউটপুট হবে [1, 4, 6, 12, 7], কারণ −
- 4 এর বাইনারি ফর্ম হল 0100
- 1 এর বাইনারি ফর্ম হল 0001
- 6 এর বাইনারি ফর্ম হল 0110
- 12 এর বাইনারি ফর্ম হল 1100
- 7 এর বাইনারি ফর্ম হল 0111
সুতরাং বিন্যাস হল [1, 4, 6, 12, 7], 1 প্রথমে আসে কারণ এর মান ছোট, সেইসাথে এই একই কারণে 6 প্রথমে আসে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন তুলনা সংজ্ঞায়িত করুন, এটি একটি সংখ্যা নেয়
- এটি একটি জোড়া p প্রদান করে (n এর বাইনারি আকারে 1 গণনা, n এর মান)
- প্রতিটি মানকে তুলনা করার আগে তুলনা ফাংশনে পাস করে সংখ্যা সাজান
- রিটার্ন সংখ্যা।
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(nums): nums.sort(key=lambda num: (bin(num).count("1"), num)) return nums nums = [4, 1, 12, 7, 6] print(solve(nums))
ইনপুট
[4, 1, 12, 7, 6]
আউটপুট
[1, 4, 6, 12, 7]