- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to find nearest point that has the same x or y coordinate using Python
Suppose we have a set of points given in an array called pts. We also have another point (x, y) which is our current location. We are defining a valid point as, a point which shares the same x-coordinate or the same y-coordinate as our current point. We have to return the index of the valid point with the smallest Manhattan distance from our current location (x, y). If there are more than one points, then return the valid point with the smallest index. (Note: the Manhattan distance between two points (a, b) and (p, q) is |a - p| + |b - q|.
So, if the input is like pts = [(1,2),(3,1),(3,4),(2,3),(4,4)] pt = (2,4), then the output will be 2 as there are two nearest points (3,4) and (2,3), but the index of (3,4) is smaller.
To solve this, we will follow these steps −
x, y := pt
idx := -1
smallest := infinity
for each p in pts, do
if p[0] is same as x or p[1] is same as y, then
dist := |x - p[0]| + |y - p[1]|
if dist < smallest, then
idx := index of p in pts
smallest := dist
otherwise when dist is same as smallest, then
if index of p in pts < idx, then
idx := index of p in pts
smallest := dist
return idx
Let us see the following implementation to get better understanding −
Example
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))
Input
[(1,2),(3,1),(3,4),(2,3),(4,4)], (2,4)
Output
2