ধরুন আমাদের একটি অর্ডার্ড পয়েন্টের লিস্ট আছে যা ২D প্লেনে একটি সিম্পল পলিগনের এন্ডপয়েন্ট রিপ্রেজেন্ট করে। আমাদের এই পলিগনের পরিসীমা বের করতে হবে।
উদাহরণস্বরূপ, যদি ইনপুট points = [(0, 0), (0,5), (3, 5), (3,0)] হয়, তবে আউটপুট হবে 16 কারণ দুটি সাইডের দৈর্ঘ্য ৩ এবং দুটি সাইডের দৈর্ঘ্য ৫, তাই 2*5 + 2*3 = 16।

সমাধানের ধাপসমূহ
getInfo()ফাংশন ডিফাইন করুন যাx1, y1, x2, y2নেবে, রিটার্ন করবেsqrt((x1-x2)^2 + (y1-y2)^2)যা ইউক্লিডিয়ান ডিস্ট্যান্স- মেইন মেথড থেকে:
N := size of points(firstx, firsty) := points[0](prevx, prevy) := (firstx, firsty)res := 0for i in range 1 to N-1:(nextx, nexty) := points[i]res := res + getInfo(prevx, prevy, nextx, nexty)prevx := nextx,prevy := nexty
res := res + getInfo(prevx, prevy, firstx, firsty)resরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝার জন্য:
from math import sqrt
def getInfo(x1, y1, x2, y2):
return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
def solve(points):
N = len(points)
firstx, firsty = points[0]
prevx, prevy = firstx, firsty
res = 0
for i in range(1, N):
nextx, nexty = points[i]
res = res + getInfo(prevx, prevy, nextx, nexty)
prevx = nextx
prevy = nexty
res = res + getInfo(prevx, prevy, firstx, firsty)
return res
points = [(0, 0), (0,5), (3, 5), (3,0)]
print(solve(points))
ইনপুট
[(0, 0), (0,5), (3, 5), (3,0)]
আউটপুট
16.0