codyssi2025/problem5.py
2025-03-22 11:41:18 +01:00

55 lines
1.6 KiB
Python

from soupsieve import closest
from tools.coordinate import Coordinate, DistanceAlgorithm
my_input = open("inputs/input5", "r").read().splitlines()
my_pos = Coordinate(0, 0)
coords = []
for line in my_input:
x, y = line.split(", ")
coords.append(Coordinate(int(x[1:]), int(y[:-1])))
p3 = 0
def get_closest_to(start: Coordinate, exclude: list[Coordinate] = None) -> Coordinate:
if exclude is None:
exclude = []
closest_coord = None
closest_dist = int(1e10)
for c in coords:
if c == start or c in exclude:
continue
next_dist = c.getDistanceTo(closest, algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
if next_dist < closest_dist:
closest_dist = next_dist
closest_coord = c
return closest_coord
min_dist = int(1e10)
max_dist = 0
closest = None
for c in coords:
dist = Coordinate(0, 0).getDistanceTo(c, algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
if min_dist > dist:
min_dist = dist
closest = c
max_dist = max(max_dist, dist)
p1 = max_dist - min_dist
p2 = closest.getDistanceTo(get_closest_to(closest), algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
p3 = my_pos.getDistanceTo(closest, algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
visited = [closest]
while len(visited) < len(coords):
next_island = get_closest_to(closest, exclude=visited)
p3 += next_island.getDistanceTo(closest, algorithm=DistanceAlgorithm.MANHATTAN, includeDiagonals=False)
visited.append(next_island)
closest = next_island
print(p1)
print(p2)
print(p3)