day9
This commit is contained in:
parent
2c4cadcf91
commit
1adeafbdec
63
day09.py
Normal file
63
day09.py
Normal file
@ -0,0 +1,63 @@
|
||||
from tools.aoc import AOCDay
|
||||
from typing import Any
|
||||
from tools.coordinate import Coordinate, DistanceAlgorithm
|
||||
|
||||
DIR = {
|
||||
'R': Coordinate(1, 0),
|
||||
'L': Coordinate(-1, 0),
|
||||
'U': Coordinate(0, -1),
|
||||
'D': Coordinate(0, 1),
|
||||
}
|
||||
|
||||
|
||||
class Day(AOCDay):
|
||||
inputs = [
|
||||
[
|
||||
(13, "input9_test"),
|
||||
(6498, "input9"),
|
||||
],
|
||||
[
|
||||
(1, "input9_test"),
|
||||
(36, "input9_test2"),
|
||||
(2531, "input9"),
|
||||
]
|
||||
]
|
||||
|
||||
def get_visited(self, rope_length: int = 2) -> int:
|
||||
rope = [Coordinate(0, 0) for _ in range(rope_length)]
|
||||
visited = set()
|
||||
visited.add(rope[-1])
|
||||
|
||||
for line in self.getInput():
|
||||
direction, count = line.split(" ")
|
||||
for _ in range(int(count)):
|
||||
rope[0] += DIR[direction]
|
||||
for knot in range(1, rope_length):
|
||||
dist = rope[knot].getDistanceTo(
|
||||
rope[knot - 1],
|
||||
algorithm=DistanceAlgorithm.MANHATTAN,
|
||||
includeDiagonals=True
|
||||
)
|
||||
step = rope[knot - 1] - rope[knot]
|
||||
if dist == 2 or abs(step.x) == 2 and abs(step.y) == 2:
|
||||
rope[knot] += Coordinate(step.x // 2, step.y // 2)
|
||||
elif dist > 2:
|
||||
if abs(step.x) == 2:
|
||||
rope[knot] += Coordinate(step.x // 2, step.y)
|
||||
else:
|
||||
rope[knot] += Coordinate(step.x, step.y // 2)
|
||||
|
||||
visited.add(rope[-1])
|
||||
|
||||
return len(visited)
|
||||
|
||||
def part1(self) -> Any:
|
||||
return self.get_visited()
|
||||
|
||||
def part2(self) -> Any:
|
||||
return self.get_visited(10)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
day = Day(2022, 9)
|
||||
day.run(verbose=True)
|
||||
2000
inputs/input9
Normal file
2000
inputs/input9
Normal file
File diff suppressed because it is too large
Load Diff
8
inputs/input9_test
Normal file
8
inputs/input9_test
Normal file
@ -0,0 +1,8 @@
|
||||
R 4
|
||||
U 4
|
||||
L 3
|
||||
D 1
|
||||
R 4
|
||||
D 1
|
||||
L 5
|
||||
R 2
|
||||
8
inputs/input9_test2
Normal file
8
inputs/input9_test2
Normal file
@ -0,0 +1,8 @@
|
||||
R 5
|
||||
U 8
|
||||
L 8
|
||||
D 3
|
||||
R 17
|
||||
D 10
|
||||
L 25
|
||||
U 20
|
||||
Loading…
Reference in New Issue
Block a user