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

পাইথনে '?' রিপ্লেস করে কোনো দুটি এডজেসেন্ট ডিজিট সমান না হয় এমন ছোটতম সংখ্যা বানানো

স্ট্রিং s এ 1, 2, 3, ? ক্যারেক্টার থাকে। ? কে 1, 2, 3-এর যেকোনো দিয়ে রিপ্লেস করুন যাতে কোনো দুটি এডজেসেন্ট ডিজিট সমান নয় এবং ফলাফল সবচেয়ে ছোট হয়।

ইনপুট উদাহরণ

s = "2??3?"

আউটপুট: 21231

অ্যালগরিদম

লেফট-টু-রাইট গ্রিডি: প্রতিটি ?-এর জন্য বাম ও ডান পাশের ডিজিট দেখে সবচেয়ে ছোট সম্ভাব্য ডিজিট (১, ২, ৩) বেছে নিন যা উভয় পাশের সাথে মিলে না।

পাইথন কোড

def solve(s):
    i = 0
    s = list(s)
    if len(s) < 2:
        if s[i] == "?":
            return "1"
    while i < len(s):
        if s[i] == "?":
            if i == 0:
                s[i] = "1" if s[i+1] != "1" else "2"
            elif i > 0 and i <= len(s) - 2:
                if s[i-1] == "1":
                    s[i] = "3" if s[i+1] == "2" else "2"
                elif s[i-1] == "2":
                    s[i] = "3" if s[i+1] == "1" else "1"
                elif s[i-1] == "3":
                    s[i] = "2" if s[i+1] == "1" else "1"
            else:  # last char
                s[i] = "1" if s[i-1] != "1" else "2"
        i += 1
    return "".join(s)

# টেস্ট
print(solve("2??3?"))  # 21231

ব্যাখ্যা

গ্রিডি কাজ করে কারণ শুধু ৩ ডিজিট (১,২,৩) এবং লোকাল কনস্ট্রেইন্ট। সবচেয়ে ছোট ডিজিট বেছে নেওয়া গ্লোবালি অপ্টিমাল।

  1. পাইথনে দুটি বাইনারি ট্রির লিফ সিকোয়েন্স মিল কিনা যাচাই

  2. পাইথনে প্রথম ও শেষ মান সমান সাবলিস্টের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম লিস্টে সবচেয়ে ছোট সংখ্যা বের করা

  4. পাইথনে দুটি সংখ্যার বাইনারি রিপ্রেজেন্টেশন অনুগ্রাম (anagram) কিনা যাচাই করা