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)