Compare commits

...

2 Commits

Author SHA1 Message Date
7442fe9089 day10 - tiles 2024-12-10 09:30:50 +01:00
1b5ec9d139 day10 - cleaned up 2024-12-10 09:30:35 +01:00
8 changed files with 14 additions and 75 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@ -2,7 +2,7 @@
<!-- AOC TILES BEGIN --> <!-- AOC TILES BEGIN -->
<h1 align="center"> <h1 align="center">
2024 - 18 ⭐ - Python 2024 - 20 ⭐ - Python
</h1> </h1>
<a href="day01.py"> <a href="day01.py">
<img src=".aoc_tiles/tiles/2024/01.png" width="161px"> <img src=".aoc_tiles/tiles/2024/01.png" width="161px">
@ -31,4 +31,7 @@
<a href="day09.py"> <a href="day09.py">
<img src=".aoc_tiles/tiles/2024/09.png" width="161px"> <img src=".aoc_tiles/tiles/2024/09.png" width="161px">
</a> </a>
<a href="day10.py">
<img src=".aoc_tiles/tiles/2024/10.png" width="161px">
</a>
<!-- AOC TILES END --> <!-- AOC TILES END -->

View File

@ -6,71 +6,39 @@ from tools.grid import Grid
from typing import Any from typing import Any
def find_nine(grid: Grid, start: Coordinate) -> int: def find_nine_ways(grid: Grid, start: Coordinate, next_val: int = 1) -> list[Coordinate]:
q = deque([start])
seen = set()
nines = set()
while q:
pos = q.popleft()
cur_val = grid.get(pos)
if cur_val == 9:
nines.add(pos)
continue
if pos in seen:
continue
seen.add(pos)
for next_pos in grid.getNeighboursOf(pos, includeDiagonal=False):
if grid.get(next_pos) == cur_val + 1:
q.append(next_pos)
return len(nines)
def find_nine_ways(grid: Grid, start: Coordinate, next_val: int = 1) -> int:
if next_val == 9: if next_val == 9:
return sum(1 for x in grid.getNeighboursOf(start, includeDiagonal=False) if grid.get(x) == 9) return [x for x in grid.getNeighboursOf(start, includeDiagonal=False) if grid.get(x) == 9]
else: else:
return sum( ret = []
find_nine_ways(grid, x, next_val + 1) for x in grid.getNeighboursOf(start, includeDiagonal=False):
for x in grid.getNeighboursOf(start, includeDiagonal=False) if grid.get(x) == next_val:
if grid.get(x) == next_val ret += find_nine_ways(grid, x, next_val + 1)
)
return ret
class Day(AOCDay): class Day(AOCDay):
inputs = [ inputs = [
[ [
(1, "input10_test2"),
(2, "input10_test3"),
(4, "input10_test4"),
(3, "input10_test5"),
(36, "input10_test"), (36, "input10_test"),
(644, "input10"), (644, "input10"),
], ],
[ [
(3, "input10_test7"),
(81, "input10_test"), (81, "input10_test"),
(1366, "input10"), (1366, "input10"),
], ],
] ]
def parse_input(self) -> Grid: def parse_input(self) -> Grid:
return Grid.from_data(self.getInput(), default=0, translate={"[0-9]": int}) return Grid.from_data(self.getInput(), default=-1, translate={"[0-9]": int})
def part1(self) -> Any: def part1(self) -> Any:
grid = self.parse_input() grid = self.parse_input()
trail_heads = [ return sum(len(set(find_nine_ways(grid, trail))) for trail in grid.find(0))
Coordinate(x, y) for y in grid.rangeY() for x in grid.rangeX() if grid.get(Coordinate(x, y)) == 0
]
return sum(find_nine(grid, trail) for trail in trail_heads)
def part2(self) -> Any: def part2(self) -> Any:
grid = self.parse_input() grid = self.parse_input()
trail_heads = [ return sum(len(find_nine_ways(grid, trail)) for trail in grid.find(0))
Coordinate(x, y) for y in grid.rangeY() for x in grid.rangeX() if grid.get(Coordinate(x, y)) == 0
]
return sum(find_nine_ways(grid, trail) for trail in trail_heads)
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -1,4 +0,0 @@
0123
1234
8765
9876

View File

@ -1,7 +0,0 @@
...0...
...1...
...2...
6543456
7.....7
8.....8
9.....9

View File

@ -1,7 +0,0 @@
..90..9
...1.98
...2..7
6543456
765.987
876....
987....

View File

@ -1,7 +0,0 @@
10..9..
2...8..
3...7..
4567654
...8..3
...9..2
.....01

View File

@ -1,7 +0,0 @@
.....0.
..4321.
..5..2.
..6543.
..7..4.
..8765.
..9....