কম্পিউটার টিউটোরিয়াল

পাইথনে ডিস্ট্যান্ট বারকোড সাজান

একটি ওয়্যারহাউসে বারকোডের একটি সারি আছে। i-তম বারকোড হলো barcodes[i]। বারকোডগুলো এভাবে সাজাতে হবে যাতে দুটি আডজাসেন্ট বারকোড একই না হয়।

ইনপুট [1,1,1,2,2,2] হলে আউটপুট [2,1,2,1,2,1]।

সমাধানের ধাপসমূহ

  • d নামে একটি ম্যাপ বানান
  • barcodes অ্যারেতে থাকা সংখ্যাগুলোর ফ্রিকোয়েন্সি d-তে স্টোর করুন
  • x := খালি লিস্ট, সব কী-ভ্যালু পেয়ার x-তে ইনসার্ট করুন
  • i := 0, result := barcodes দৈর্ঘ্যের লিস্ট 0 দিয়ে ফিল করুন
  • x কে ফ্রিকোয়েন্সি অনুযায়ী সর্ট করুন
  • যখন i < len(result):
    • result[i] := x-র শেষ এন্ট্রির এলিমেন্ট
    • শেষ এন্ট্রির ফ্রিকোয়েন্সি কমান
    • যদি ফ্রিকোয়েন্সি ০ হয়, তবে সেটি x-র থেকে ডিলিট
    • i += 2
  • i := 1, আবার i < len(result) পর্যন্ত উপরের প্রসেস রিপিট
  • result রিটার্ন

উদাহরণ

class Solution(object):
    def rearrangeBarcodes(self, barcodes):
        d = {}
        for i in barcodes:
            if i not in d:
                d[i] = 1
            else:
                d[i] += 1
        x = []
        for a, b in d.items():
            x.append([a, b])
        i = 0
        result = [0] * len(barcodes)
        x = sorted(x, key=lambda v: v[1])
        while i < len(result):
            result[i] = x[-1][0]
            x[-1][1] -= 1
            if x[-1][1] == 0:
                x.pop()
            i += 2
        i = 1
        while i < len(result):
            result[i] = x[-1][0]
            x[-1][1] -= 1
            if x[-1][1] == 0:
                x.pop()
            i += 2
        return result

ob = Solution()
print(ob.rearrangeBarcodes([1,1,1,2,2,2]))

ইনপুট

[1,1,1,2,2,2]

আউটপুট

[2, 1, 2, 1, 2, 1]
  1. পাইথনে issuperset() ফাংশন

  2. পাইথনে callable() ফাংশন

  3. পাইথনে আন্ডারস্কোর (_) এর ব্যবহার

  4. পাইথনে Quine প্রোগ্রাম (স্ব-প্রजनনকারী কোড)