কম্পিউটার

চারটি বিন্দুর সন্ধান করুন যাতে তারা একটি বর্গক্ষেত্র তৈরি করে যার বাহুগুলি পাইথনে x এবং y অক্ষের সমান্তরাল।


ধরুন আমাদের n জোড়া পয়েন্ট আছে; আমাদের চারটি বিন্দু খুঁজে বের করতে হবে যাতে তারা একটি বর্গক্ষেত্র তৈরি করতে পারে যার বাহুগুলি x এবং y অক্ষের সমান্তরাল হয় অন্যথায় "সম্ভব নয়" ফিরে আসে যদি আমরা একাধিক বর্গ খুঁজে পেতে পারি তবে যার ক্ষেত্রফল সর্বাধিক তা নির্বাচন করুন৷

সুতরাং, যদি ইনপুট হয় n =6, পয়েন্ট =[(2, 2), (5, 5), (4, 5), (5, 4), (2, 5), (5, 2)] , তাহলে আউটপুট হবে 3, পয়েন্ট হল (2, 2) (5, 2) (2, 5) (5, 5)

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

  • my_map :=একটি নতুন মানচিত্র

  • 0 থেকে n রেঞ্জের জন্য, করুন

    • my_map[(points[i,0], points[i,1])] =my_map.[(পয়েন্ট[i,0], পয়েন্ট[i,1]], 0) + 1

  • পাশ :=-1

  • x :=-1

  • y :=-1

  • 0 থেকে n রেঞ্জের জন্য, করুন

    • my_map[পয়েন্ট[i, 0], পয়েন্ট[i, 1]] :=my_map[পয়েন্ট[i, 0], পয়েন্ট[i, 1]] - 1

    • 0 থেকে n রেঞ্জে j এর জন্য, করুন

      • my_map[পয়েন্ট[j, 0], points[j, 1]] :=my_map[points[j, 0], points[j, 1]] - 1

      • যদি (i j-এর মতো না হয় এবং (পয়েন্ট[i,0]-পয়েন্ট[j,0]) একই হয় (পয়েন্ট[i,1]- পয়েন্ট[j,1])), তাহলে

        • যদি my_map[(points[i,0], points[j, 1])]> 0 এবং my_map[(points[j,0], points[i,1])]> 0, তাহলে

          • যদি (পাশ <|পয়েন্ট[i,0] - পয়েন্ট[j,0]| অথবা (পাশ |পয়েন্ট[i,0] - পয়েন্ট[j,0]| এবং ((পয়েন্ট[i,0] * পয়েন্ট[i,0] + পয়েন্ট[i,1] * পয়েন্ট[i,1]) <(x * x + y * y)))) −

            • x :=পয়েন্ট[i, 0]

            • y :=পয়েন্ট[i, 1]

            • পার্শ্ব :=|পয়েন্ট[i,0] - পয়েন্ট[j,0]|

      • my_map[পয়েন্ট[j, 0], points[j, 1]] :=my_map[পয়েন্ট[j, 0], পয়েন্ট[j, 1]] + 1

    • my_map[পয়েন্ট[i, 0], পয়েন্ট[i, 1]] :=my_map[পয়েন্ট[i, 0], পয়েন্ট[i, 1]] + 1

  • যদি পার্শ্ব -1 এর মত না হয়, তাহলে

    • ডিসপ্লে সাইড

    • ডিসপ্লে পয়েন্ট (x,y), (x+side, y), (x,y + side), (x+side, y+side)

  • অন্যথায়,

    • "এমন কোনো বর্গক্ষেত্র নেই"

      প্রদর্শন করুন

উদাহরণ

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

def get_square_points(points,n):
   my_map = dict()
   for i in range(n):
      my_map[(points[i][0], points[i][1])] = my_map.get((points[i][0], points[i][1]), 0) + 1
   side = -1
   x = -1
   y = -1
   for i in range(n):
      my_map[(points[i][0], points[i][1])]-=1
      for j in range(n):
         my_map[(points[j][0], points[j][1])]-=1
            if (i != j and (points[i][0]-points[j][0]) == (points[i][1]-points[j][1])):
               if (my_map[(points[i][0], points[j][1])] > 0 and my_map[(points[j][0], points[i][1])] > 0):
                  if (side < abs(points[i][0] - points[j][0]) or (side == abs(points[i][0] - points[j][0]) and ((points[i][0] * points[i][0] + points[i][1] * points[i][1]) < (x * x + y * y)))):
                     x = points[i][0]
                     y = points[i][1]
                     side = abs(points[i][0] - points[j][0])
            my_map[(points[j][0], points[j][1])] += 1
         my_map[(points[i][0], points[i][1])] += 1
      if (side != -1):
         print("Side:", side)
         print("Points:", (x,y), (x+side, y), (x,y + side), (x+side, y+side))
      else:
         print("No such square")
n = 6
points=[(2, 2), (5, 5), (4, 5), (5, 4), (2, 5), (5, 2)]
get_square_points(points, n)

ইনপুট

6, [(2, 2), (5, 5), (4, 5), (5, 4), (2, 5), (5, 2)]

আউটপুট

Side: 3 Points: (2, 2) (5, 2) (2, 5) (5, 5)

  1. প্রদত্ত যোগফলের সাথে জোড়া খুঁজুন যাতে পাইথনে জোড়ার উপাদানগুলি বিভিন্ন সারিতে থাকে

  2. একটি অ্যারেতে এমন একটি উপাদান খুঁজুন যাতে উপাদানগুলি পাইথনে কঠোরভাবে হ্রাস এবং বৃদ্ধির ক্রম তৈরি করে

  3. একটি ধনাত্মক সংখ্যা M খুঁজুন যেমন gcd(N^M,N&M) পাইথনে সর্বাধিক

  4. পাইথনে দাবী কি এবং কিভাবে তারা বাহিত হয়?