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

পাইথনে রান-লেনথ স্ট্রিং ডিকোডিং ইটেরেটর ক্লাস ইমপ্লিমেন্ট করার প্রোগ্রাম


মান लीজিয়ে আমরা একটি ইটেরেটর ক্লাস ডিফাইন করতে চাই যা রান-লেনথ এনকোডেড একটি লোয়ারকেস স্ট্রিং s দিয়ে কন্সট্রাক্ট করা হবে। এই ইটেরেটরের দুটি ফাংশন আছে:

  • next() - এটি ইটেরেটরের পরবর্তী এলিমেন্ট খুঁজে বের করে
  • hasnext() - এটি পরবর্তী এলিমেন্ট আছে কিনা তা চেক করে

উদাহরণস্বরূপ, ইনপুট যদি s = "2b1a" হয়, তবে s দিয়ে একটি অবজেক্ট কন্সট্রাক্ট করুন, তারপর next(), hasnext(), next(), next(), hasnext() কল করলে আউটপুট হবে "b", True, "b", "a", False।

এটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করব:

  • একটি কন্সট্রাক্টর ডিফাইন করুন। এটি s নিবে।
  • output := একটি নতুন তালিকা
  • num := খালি স্ট্রিং
  • s তালিকার প্রতিটি i এর জন্য:
    • যদি i আলফাবেটিক হয়, তবে
      • output-র শেষে num যোগ করুন
      • output-র শেষে i যোগ করুন
      • num := খালি স্ট্রিং
    • অন্যথায়,
      • num := num + i
  • next() ফাংশন ডিফাইন করুন।
  • যদি hasnext() true হয়, তবে
    • count := output[0]
    • letter := output[1]
    • count := count - 1
    • যদি count > 0 হয়, তবে
      • output[0] := output[0] - 1
    • অন্যথায়,
      • output := output[২ থেকে শেষ]
    • letter রিটার্ন করুন
  • hasnext() ফাংশন ডিফাইন করুন।
  • যদি output-র সাইজ ০ না হয়, তবে
    • True রিটার্ন করুন
  • False রিটার্ন করুন

উদাহরণ

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:

class RunLengthIterator:
    def __init__(self, s):
        self.output = []
        num = ""
        for i in s:
            if i.isalpha():
                self.output.append(int(num))
                self.output.append(i)
                num = ""
            else:
                num += i
    def next(self):
        if self.hasnext():
            count = self.output[0]
            letter = self.output[1]
            count -= 1
            if count > 0:
                self.output[0] -= 1
            else:
                self.output = self.output[2:]
            return letter
    def hasnext(self):
        if len(self.output) != 0:
            return True
        return False

s = "2b1a"
obj = RunLengthIterator(s)
print(obj.next())
print(obj.hasnext())
print(obj.next())
print(obj.next())
print(obj.hasnext())

ইনপুট

"2b1a" obj = RunLengthIterator(s) obj.next() obj.hasnext() obj.next() obj.next() obj.hasnext()

আউটপুট

b True b a False
  1. পাইথন প্রোগ্রাম কীভাবে রান করবেন?

  2. পাইথনে স্ট্রিং-এ জোড় দৈর্ঘ্যের শব্দ প্রিন্ট করা

  3. পাইথনে স্ট্রিং টেমপ্লেট ক্লাস

  4. পাইথনে ইটারেটর ফাংশন (Iterator Function)