generated from public/aoc_template
problem 5
This commit is contained in:
parent
5f1b5de744
commit
60ea8eb791
60
inputs/input5
Normal file
60
inputs/input5
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
(-97, 92)
|
||||||
|
(-223, -177)
|
||||||
|
(397, -379)
|
||||||
|
(-197, 99)
|
||||||
|
(-179, 342)
|
||||||
|
(-25, 123)
|
||||||
|
(368, -120)
|
||||||
|
(110, 189)
|
||||||
|
(24, 138)
|
||||||
|
(361, 191)
|
||||||
|
(-48, 90)
|
||||||
|
(-325, 400)
|
||||||
|
(-359, 107)
|
||||||
|
(-313, -249)
|
||||||
|
(-1, -376)
|
||||||
|
(189, -143)
|
||||||
|
(63, -242)
|
||||||
|
(-118, 22)
|
||||||
|
(337, 210)
|
||||||
|
(138, 148)
|
||||||
|
(-255, -44)
|
||||||
|
(-236, 375)
|
||||||
|
(134, -98)
|
||||||
|
(77, 230)
|
||||||
|
(45, 87)
|
||||||
|
(352, -179)
|
||||||
|
(304, -385)
|
||||||
|
(380, 368)
|
||||||
|
(-111, -349)
|
||||||
|
(324, 48)
|
||||||
|
(-364, -125)
|
||||||
|
(-105, 199)
|
||||||
|
(321, 302)
|
||||||
|
(-254, -342)
|
||||||
|
(-337, 121)
|
||||||
|
(-44, 292)
|
||||||
|
(-260, 128)
|
||||||
|
(310, 313)
|
||||||
|
(-128, 383)
|
||||||
|
(305, 349)
|
||||||
|
(367, -194)
|
||||||
|
(90, -235)
|
||||||
|
(218, -41)
|
||||||
|
(288, 341)
|
||||||
|
(-335, -276)
|
||||||
|
(13, 89)
|
||||||
|
(-272, 395)
|
||||||
|
(148, 348)
|
||||||
|
(-394, -313)
|
||||||
|
(-94, 85)
|
||||||
|
(192, 306)
|
||||||
|
(-9, -364)
|
||||||
|
(-275, -43)
|
||||||
|
(306, 273)
|
||||||
|
(63, -150)
|
||||||
|
(224, 177)
|
||||||
|
(-13, -263)
|
||||||
|
(384, 95)
|
||||||
|
(-323, 57)
|
||||||
|
(309, 309)
|
||||||
8
inputs/input5_test
Normal file
8
inputs/input5_test
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
(-16, -191)
|
||||||
|
(92, 186)
|
||||||
|
(157, -75)
|
||||||
|
(39, -132)
|
||||||
|
(-42, 139)
|
||||||
|
(-74, -150)
|
||||||
|
(200, 197)
|
||||||
|
(-106, 105)
|
||||||
54
problem5.py
Normal file
54
problem5.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
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)
|
||||||
Loading…
Reference in New Issue
Block a user