কম্পিউটার

পাইথনে প্রদত্ত স্ট্যাক অপারেশন সম্পাদন করে চূড়ান্ত উত্তর পরীক্ষা করার প্রোগ্রাম


ধরুন আমাদের কাছে অপস নামক স্ট্রিং এর একটি তালিকা আছে যেখানে প্রতিটি উপাদান নিচের মত এই অপারেশনগুলির যে কোনো একটি।

  • একটি অ-নেতিবাচক পূর্ণসংখ্যা মান যা একটি স্ট্যাকের মধ্যে পুশ করা হবে
  • স্ট্যাক থেকে শীর্ষস্থানীয় উপাদান মুছে ফেলার জন্য "POP"
  • স্ট্যাকের মধ্যে আবার শীর্ষ উপাদান সন্নিবেশ করার জন্য, এটিকে সদৃশ করতে "DUP"
  • "+" উপরের দুটি উপাদান পপ আউট করতে এবং যোগফলের মান পুশ করতে
  • "-" উপরের দুটি উপাদানকে পপ আউট করতে এবং (শীর্ষ উপাদান - শীর্ষের ঠিক নীচে উপাদান) এর ফলাফলটি পুশ করতে

সুতরাং আমাদের এই সমস্ত ক্রিয়াকলাপ প্রয়োগ করার পরে স্ট্যাকের শীর্ষ মোটর উপাদানটি খুঁজে বের করতে হবে। কিছু অপারেশন বৈধ না হলে -1 ফেরত দিন।

সুতরাং, যদি ইনপুট হয় ops =["5", "2", "POP", "DUP", "3", "+", "15", "-"], তাহলে আউটপুট হবে 7 কারণ প্রাথমিকভাবে প্রথম দুটি অপারেশন ব্যবহার করে, 5 এবং 2 সন্নিবেশ করান যাতে স্ট্যাকটি [5, 2] এর মতো হয়, তারপর একটি পপ করুন যাতে বর্তমান স্ট্যাকটি [5] এর মতো হয়। এর পরে DUP-এর জন্য, 5টি সদৃশ হবে, তাই স্ট্যাকটি [5, 5] এর মতো, তারপর 3 যোগ করুন [5, 5, 3], তারপর যোগ করার জন্য এটি হবে [5, 8], তারপর 15 ঢোকান, তাই [5, 8, 15] এর পরে বিয়োগ অপারেশনের জন্য স্ট্যাক হবে [5, (15-8)] =[5, 7]। তাই শীর্ষস্থানীয় উপাদান হল 7।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • স্ট্যাক :=একটি নতুন স্ট্যাক
  • প্রত্যেক i অপারেশনের জন্য, করুন
    • যদি আমি একটি সংখ্যা হয়, তাহলে
      • আমাকে স্ট্যাকের মধ্যে ঠেলে
    • অন্যথায় যখন স্ট্যাকের সাইজ>=1 এবং i "POP", তখন
      • স্ট্যাক থেকে পপ শীর্ষ উপাদান
    • অন্যথায় যখন স্ট্যাকের আকার>=1 এবং i "DUP" এর মতো হয়, তখন
      • স্ট্যাক থেকে পি-এ পপ টপ-মোস্ট এলিমেন্ট
      • এবং p দুইবার ঢোকান
    • অন্যথায় যখন স্ট্যাকের আকার>=2 এবং i "+" এর মত হয়, তাহলে
      • স্ট্যাক থেকে একটি এ
      • পপ টপ-মোস্ট উপাদান
      • স্ট্যাক থেকে বি-তে শীর্ষ-সর্বাধিক উপাদান পপ করুন
      • স্ট্যাকে (a + b) পুশ করুন
    • অন্যথায় যখন স্ট্যাকের সাইজ>=2 এবং i "-" এর মত হয় তখন
      • স্ট্যাক থেকে একটি এ
      • পপ টপ-মোস্ট উপাদান
      • স্ট্যাক থেকে বি-তে শীর্ষ-সর্বাধিক উপাদান পপ করুন
      • স্ট্যাকে (a - b) পুশ করুন
    • অন্যথায়,
      • রিটার্ন -1
  • স্ট্যাক থেকে শীর্ষ উপাদান ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

def solve(ops):
   stack = []
   for i in ops:
      if i.isnumeric() == True:
         stack.append(int(i))
      elif len(stack) >= 1 and i == "POP":
         stack.pop()
      elif len(stack) >= 1 and i == "DUP":
         p = stack.pop()
         stack.append(p)
         stack.append(p)
      elif len(stack) >= 2 and i == "+":
         a = stack.pop()
         b = stack.pop()
         stack.append(a + b)
      elif len(stack) >= 2 and i == "-":
         a = stack.pop()
         b = stack.pop()
         stack.append(a - b)
      else:
         return -1
   return stack.pop()

ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"]
print(solve(ops))

ইনপুট

["5", "2", "POP", "DUP", "3", "+", "15", "-"]

আউটপুট

7

  1. একটি প্রদত্ত স্ট্রিং কীওয়ার্ড কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  2. প্রদত্ত স্ট্রিং প্যানগ্রাম কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম

  3. পাইথন প্রোগ্রামে প্রদত্ত নম্বরটি ফিবোনাচি নম্বর কিনা তা কীভাবে পরীক্ষা করবেন?

  4. পাইথন প্রোগ্রামের জন্য কিভাবে একটি প্রদত্ত নম্বর একটি ফিবোনাচি নম্বর কিনা তা পরীক্ষা করবেন?