কম্পিউটার

পাইথনে সেল ফিউশন


ধরুন আমাদের কাছে কোষ নামক সংখ্যার একটি তালিকা আছে; এই তালিকাটি বিভিন্ন কক্ষের আকারের প্রতিনিধিত্ব করছে। এখন, প্রতিটি পুনরাবৃত্তিতে, দুটি বৃহত্তম কোষ a এবং b এই নিয়ম অনুসারে যোগাযোগ করে:সুতরাং, যদি a =b, তারা উভয়ই মারা যায়। অন্যথায়, দুটি কোষ একত্রিত হয় এবং তাদের আকার ((a + b)/3) তল হয়ে যায়। আমাদের শেষ কক্ষের আকার খুঁজে বের করতে হবে অথবা কোনো সেল অবশিষ্ট না থাকলে -1 ফেরত দিতে হবে।

সুতরাং, যদি ইনপুটটি [20,40,40,30] এর মত হয়, তাহলে আউটপুট হবে 16, প্রথম পুনরাবৃত্তিতে, 40 এবং 40 মারা যাবে, তারপর 20 এবং 30 (20+30) / 3 এর ফ্লোরে পরিণত হবে। =50/3 =16 তলা

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

  • কোষ :=কোষ অ্যারের প্রতিটি মান ঋণাত্মক রূপান্তর করুন

  • কোষ দিয়ে একটি গাদা তৈরি করুন

  • ঘর খালি না থাকার সময় −

    করুন
    • কোষ থেকে দুটি উপাদান মুছে ফেলুন এবং তাদের আবার নেতিবাচক রূপান্তর করুন, এবং পরপর প্রথম এবং দ্বিতীয় হিসাবে তাদের বরাদ্দ করুন

  • যদি প্রথমটি সেকেন্ডের সমান না হয়, তাহলে −

    • স্তূপে (প্রথম+দ্বিতীয়)/3) ফ্লোরের ঋণাত্মক ঢোকান

  • কোষের নেতিবাচক ফেরত দিন[0] যদি কোষে কিছু উপাদান থাকে অন্যথায় - 1

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

উদাহরণ

from heapq import heapify, heappop, heappush
class Solution:
   def solve(self, cells):
      cells=[-x for x in cells]
      heapify(cells)
      while len(cells)>1:
         first,second = -heappop(cells), -heappop(cells)
         if first!=second:
            heappush(cells, -((first+second)//3))
      return -cells[0] if cells else -1
ob = Solution()
cells = [20,40,40,30]
print(ob.solve(cells))

ইনপুট

[20,40,40,30]

আউটপুট

16

  1. পাইথনে ম্যাট্রিক্সে ব্রেডথ ফার্স্ট সার্চ

  2. পাইথনের চেসবোর্ডে একটি প্রদত্ত কোষে রানী আক্রমণ করতে পারে কিনা তা পরীক্ষা করুন

  3. issuperset() পাইথনে

  4. মাইক্রোসফট এক্সেলে সেল বিভক্ত করার ৩টি উপায়