কম্পিউটার

সমস্ত বলকে পাইথনে বর্তমান অবস্থানে সরানোর জন্য প্রয়োজনীয় মোট দূরত্ব দেখানো তালিকা খুঁজে বের করার প্রোগ্রাম


ধরুন আমাদের কাছে একটি বাইনারি তালিকা আছে যাকে nums বলা হয় যেখানে শুধুমাত্র 0s এবং 1s রয়েছে যেখানে একটি 0 ইঙ্গিত করে খালি ঘর এবং 1 নির্দেশ করে ঘরটি একটি বল দ্বারা পূর্ণ। আমাদের L এর একটি নতুন তালিকা খুঁজে বের করতে হবে, যার আকারও সংখ্যার আকারের মতো, যেখানে L[i] সমস্ত বলকে L[i] এ সরানোর জন্য প্রয়োজনীয় মোট দূরত্বে সেট করা হয়েছে। এখানে সূচক j থেকে সূচক i এ একটি বল সরানোর দূরত্ব হল |j - i|.

সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[1, 1, 0, 1], তাহলে আউটপুট হবে [4, 3, 4, 5], কারণ

  • L[0] =|0 - 0| + |1 - 0| + |3 - 0|
  • L[1] =|0 - 1| + |1 - 1| + |3 - 1|
  • L[2] =|0 - 2| + |1 - 2| + |3 - 2|
  • L[3] =|0 - 3| + |1 - 3| + |3 - 3|

সুতরাং, সমস্ত বলকে L[1]-এ সরানোর জন্য আমাদের দূরত্ব 1 সহ সূচক 0 থেকে 1 বল এবং দূরত্ব 2 সহ সূচক 3 থেকে 1 বলকে সরাতে হবে।

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

  • সংখ্যা খালি হলে, তারপর
    • একটি নতুন তালিকা ফেরত দিন
  • left_count :=0
  • right_count :=0
  • left_sum :=0
  • right_sum :=0
  • ফলাফল :=একটি নতুন তালিকা
  • প্রতিটি সূচক এবং মানের সংখ্যার জন্য, করুন
    • যদি সংখ্যাটি অ-শূন্য হয়, তাহলে
      • right_count :=right_count + 1
      • right_sum :=right_sum + index
  • প্রতিটি সূচক এবং মানের সংখ্যার জন্য, করুন
    • ফলের শেষে সন্নিবেশ (left_sum + right_sum)
    • যদি সংখ্যাটি অ-শূন্য হয়, তাহলে
      • right_count :=right_count - 1
      • left_count :=left_count + 1
    • left_sum :=left_sum + left_count
    • right_sum :=right_sum - right_count
  • ফলাফল

উদাহরণ

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

def solve(nums):
   if not nums:
      return []

   left_count = right_count = 0
   left_sum = right_sum = 0
   result = []

   for index, num in enumerate(nums):
      if num:
         right_count += 1
         right_sum += index

   for index, num in enumerate(nums):
      result.append(left_sum + right_sum)

      if num:
         right_count -= 1
         left_count += 1

      left_sum += left_count
      right_sum -= right_count

   return result

nums = [1, 1, 0, 1]
print(solve(nums))

ইনপুট

[1, 1, 0, 1]

আউটপুট

[4, 3, 4, 5]

  1. পাইথনে সমস্ত চালান সম্পূর্ণ করার জন্য মোট খরচ খোঁজার প্রোগ্রাম

  2. পাইথন প্রোগ্রাম একটি তালিকার ক্রমবর্ধমান যোগফল খুঁজে বের করতে

  3. পাইথন প্রোগ্রাম একটি তালিকার সমস্ত জোড়ার মধ্যে পরম পার্থক্যের যোগফল খুঁজে বের করতে

  4. পাইথন প্রোগ্রাম একটি তালিকায় সর্বাধিক এবং সর্বনিম্ন উপাদানের অবস্থান খুঁজে পেতে?