একটি pts পয়েন্টের অ্যারে এবং একটি বর্তমান লোকেশন (x, y) দেওয়া আছে। একটি পয়েন্ট ভ্যালিড হবে যদি তার x-কোঅর্ডিনেট বা y-কোঅর্ডিনেট বর্তমান লোকেশনের সাথে মিলে। সবচেয়ে কম ম্যানহ্যাটান দূরত্ব (|a-p| + |b-q|) वाले ভ্যালিড পয়েন্টের ইনডেক্স ফেরত দিন। একাধিক হলে ন্যূনতম ইনডেক্স ফেরত দিন।
যেমন, pts = [(1,2),(3,1),(3,4),(2,3),(4,4)], pt = (2,4) হলে আউটপুট ২। কারণ (3,4) এবং (2,3) দুটোই নিকটতম, কিন্তু (3,4)-এর ইনডেক্স ছোট।
সমাধানের ধাপসমূহ
- x, y := pt
- idx := -1, smallest := অসীম
- pts-এর প্রতিটি p এর জন্য:
- যদি p[0] == x বা p[1] == y হয়:
- dist := |x - p[0]| + |y - p[1]|
- যদি dist < smallest হয়, তবে idx := p-এর ইনডেক্স, smallest := dist
- অন্যথায় যদি dist == smallest হয় এবং p-এর ইনডেক্স < idx হয়, তবে idx আপডেট করুন।
- idx ফেরত দিন।
উদাহরণ
def solve(pts, pt):
x, y = pt
idx = -1
smallest = float("inf")
for p in pts:
if p[0] == x or p[1] == y:
dist = abs(x - p[0]) + abs(y - p[1])
if dist < smallest:
idx = pts.index(p)
smallest = dist
elif dist == smallest:
if pts.index(p) < idx:
idx = pts.index(p)
smallest = dist
return idx
pts = [(1,2),(3,1),(3,4),(2,3),(4,4)]
pt = (2,4)
print(solve(pts, pt))
ইনপুট
[(1,2),(3,1),(3,4),(2,3),(4,4)], (2,4)
আউটপুট
2