ধরুন আমাদের একটি গোল পার্সার আছে যেটি একটি প্রদত্ত স্ট্রিং কমান্ডকে ব্যাখ্যা করতে পারে। একটি কমান্ড
নিয়ে গঠিত-
একটি বর্ণমালা "G",
-
খোলা এবং বন্ধ বন্ধনী "()"
-
এবং/অথবা "(আল)" কিছু ক্রমে।
আমাদের লক্ষ্য পার্সার "G" কে স্ট্রিং "G", "()" কে "o" হিসাবে এবং "(al)" কে স্ট্রিং "al" হিসাবে ব্যাখ্যা করবে। অবশেষে ব্যাখ্যা করা স্ট্রিংগুলিকে মূল ক্রমে সংযুক্ত করা হয়। তাই যদি আমাদের স্ট্রিং কমান্ড থাকে, তাহলে আমাদের লক্ষ্য পার্সারের কমান্ডের ব্যাখ্যা খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুট কমান্ডের মত হয় ="G()()()(al)(al)", তাহলে আউটপুট হবে Goooalal।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
s:=ফাঁকা স্ট্রিং
-
i এর জন্য 0 থেকে কমান্ডের আকার - 1, করুন
-
যদি কমান্ড[i] "(" এর মত না হয় এবং কমান্ড[i] ") এর মত না হয়, তাহলে
-
s :=s concatenate কমান্ড[i]
-
-
যদি কমান্ড[i] একই হয় "(" এবং কমান্ড[i+1] একই হয় ")" এবং i+1
-
s :=s concatenate 'o'
-
-
কমান্ড[i] যদি "(" এর মত হয়, তাহলে
-
পরবর্তী পুনরাবৃত্তির জন্য যান
-
-
যদি কমান্ড[i] ")" এর মত হয়, তাহলে
-
পরবর্তী পুনরাবৃত্তির জন্য যান
-
-
-
s
ফেরত দিন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(command): s="" for i in range(len(command)): if command[i]!="(" and command[i]!=")": s+=command[i] if command[i]=="(" and command[i+1]==")" and i+1<len(command): s+='o' if command[i]=="(": continue if command[i]==")": continue return s command = "G()()()(al)(al)" print(solve(command))
ইনপুট
"G()()()(al)(al)"
আউটপুট
Goooalal