কম্পিউটার

পাইথনে প্রদত্ত বলটি দখলকারী বাক্সের অবস্থান খুঁজুন


ধরুন আমাদের দুটি অ্যারে A এবং B আছে। A এর আকার হল সারির সংখ্যা এবং A[i] হল থ সারির বাক্সের সংখ্যা। এবং B হল বলের অ্যারে যেখানে B[i] বলের উপর একটি সংখ্যা নির্দেশ করে। প্রদত্ত বল i (মান B[i]) একটি বাক্সে স্থাপন করা হবে যার অবস্থান শুরু থেকে B[i]। আমাদের প্রতিটি B[i] এর সাথে সংশ্লিষ্ট বাক্সের সারি এবং কলাম খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি A =[3, 4, 5, 6], B =[1, 3, 5, 2] এর মত হয়, তাহলে আউটপুট হবে [(1, 1), (1, 3), ( 2, 2), (1, 2)] B[0] =1 হিসাবে, তারপর বক্সের অবস্থান হবে 1ম সারি, 1ম কলাম B[1] =3, তারপর বক্সের অবস্থান হবে 1ম সারি, 3য় কলাম, B [2] =5, তারপর বক্সের অবস্থান হবে 2য় সারি, 2য় কলাম, B[3] =2, তারপর বক্সের অবস্থান হবে 1ম সারি, 2য় কলাম

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

  • len_a :=A

    এর আকার
  • len_b :=B

    এর আকার
  • আমি 1 থেকে len_a রেঞ্জের জন্য, কর

    • A[i] :=A[i] + A[i - 1]

  • আমি 0 থেকে len_b রেঞ্জের জন্য, কর

    • সারি :=একটি সূচক যেখানে আমরা A সাজানো বজায় রাখতে B[i] সন্নিবেশ করতে পারি

    • যদি সারি>=1 হয়, তাহলে

      • box_num :=B[i] - A[সারি - 1]

    • অন্যথায়,

      • box_num :=B[i]

    • একটি জোড়া প্রদর্শন করুন (সারি + 1, বক্স_সংখ্যা)

উদাহরণ

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

import bisect
def get_position(A, B):
   len_a = len(A)
   len_b = len(B)
   for i in range(1, len_a):
      A[i] += A[i - 1]
   for i in range(len_b):
      row = bisect.bisect_left(A, B[i])
      if row >= 1:
         box_num = B[i] - A[row - 1]
      else:
         box_num = B[i]
      print ((row + 1, box_num))
A = [3, 4, 5, 6]
B = [1, 3, 5, 2]
get_position(A, B)

ইনপুট

[3, 4, 5, 6], [1, 3, 5, 2]

আউটপুট

(1, 1)
(1, 3)
(2, 2)
(1, 2)

  1. পাইথনে n রিভার্সালের পরে একটি বলের অবস্থান খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে একটি প্রদত্ত সমীকরণের মান খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে প্রদত্ত পয়েন্টের মাধ্যমে বর্তমান অবস্থান থেকে একটি বিন্দু পৌঁছানো যায় কিনা তা খুঁজে বের করার প্রোগ্রাম

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