ধরুন আমাদের একটি বুলিয়ান এক্সপ্রেশন আছে, আমাদের সেই এক্সপ্রেশনের মূল্যায়ন করার পর ফলাফল বের করতে হবে।
একটি অভিব্যক্তি হয় −
হতে পারে-
"t", সত্যে মূল্যায়ন;
-
"f", False এ মূল্যায়ন করা;
-
"!(অভিব্যক্তি)", অভ্যন্তরীণ অভিব্যক্তির যৌক্তিক নয় বলে মূল্যায়ন করা;
-
"&(expr1,expr2,...)", 2 বা তার বেশি অভ্যন্তরীণ অভিব্যক্তির যৌক্তিক AND মূল্যায়ন করা;
-
"|(expr1,expr2,...)", 2 বা তার বেশি অভ্যন্তরীণ অভিব্যক্তির যৌক্তিক OR মূল্যায়ন করা;
সুতরাং, যদি ইনপুট "|(!(t),&(t,f,t))" এর মত হয়, তাহলে আউটপুট হবে fasle, এর কারণ !(t) মিথ্যা, তারপর &(t,f, t) এছাড়াও মিথ্যা, তাই সমস্ত মিথ্যা মানের OR মিথ্যা হবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
সংজ্ঞায়িত সমাধান(), এটি ই, i
লাগবে -
যদি e[i] "f" এর মত হয়, তাহলে −
-
রিটার্ন (মিথ্যা, i + 1)
-
-
অন্যথায় যখন e[i] "t" -
এর মত হয় -
রিটার্ন (সত্য, i + 1)
-
op :=e[i], i :=i + 2
-
একটি স্ট্যাক সংজ্ঞায়িত করুন
-
যখন e[i] বন্ধনী বন্ধ করছে না, −
করুন-
যদি e[i] "," এর মত হয়, তাহলে -
-
i :=i + 1
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
res,i :=সমাধান (e, i)
-
স্ট্যাকের মধ্যে পুশ res
-
-
op যদি "&" এর মত হয়, তাহলে −
-
স্ট্যাকের সমস্ত উপাদান সত্য হলে সত্য ফেরত দিন, অন্যথায় মিথ্যা, i + 1
-
-
অন্যথায় যখন op " OR " -
এর মত হয়-
স্ট্যাকের মধ্যে অন্তত একটি উপাদান সত্য হলে সত্য ফেরত দিন, অন্যথায় মিথ্যা, i + 1
-
-
রিটার্ন (স্ট্যাকের বিপরীত [0], i + 1)
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
s,y :=সমাধান করুন(এক্সপ্রেশন, 0)
-
s
ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution(object): def parseBoolExpr(self, expression): s,y = self.solve(expression,0) return s def solve(self,e,i): if e[i] =="f": return False,i+1 elif e[i] == "t": return True,i+1 op = e[i] i = i+2 stack = [] while e[i]!=")": if e[i] == ",": i+=1 continue res,i = self.solve(e,i) stack.append(res) if op == "&": return all(stack),i+1 elif op == "|": return any(stack),i+1 return not stack[0],i+1 ob = Solution() print(ob.parseBoolExpr("|(!(t),&(t,f,t))"))
ইনপুট
"|(!(t),&(t,f,t))"
আউটপুট
False