generated from public/aoc_template
Day 16
This commit is contained in:
parent
8949e72e6d
commit
01ce268595
72
day16.py
Normal file
72
day16.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
from collections import deque
|
||||||
|
from tools.aoc import AOCDay
|
||||||
|
from tools.coordinate import Coordinate
|
||||||
|
from tools.grid import Grid
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
|
||||||
|
def walk(grid: Grid, start: tuple[Coordinate, tuple[int, int]]) -> int:
|
||||||
|
visited = set()
|
||||||
|
q = deque()
|
||||||
|
q.append(start)
|
||||||
|
while q:
|
||||||
|
cur = q.popleft()
|
||||||
|
if cur in visited:
|
||||||
|
continue
|
||||||
|
pos, direction = cur
|
||||||
|
if not grid.isWithinBoundaries(pos):
|
||||||
|
continue
|
||||||
|
visited.add(cur)
|
||||||
|
|
||||||
|
tile = grid.get(pos)
|
||||||
|
if not tile or (tile == '-' and dir in [(0, 1), (0, -1)]) or (tile == '|' and dir in [(1, 0), (-1, 0)]):
|
||||||
|
q.append((pos + direction, direction))
|
||||||
|
elif tile == '|':
|
||||||
|
q.append((pos + (0, 1), (0, 1)))
|
||||||
|
q.append((pos + (0, -1), (0, -1)))
|
||||||
|
elif tile == '-':
|
||||||
|
q.append((pos + (1, 0), (1, 0)))
|
||||||
|
q.append((pos + (-1, 0), (-1, 0)))
|
||||||
|
elif tile == '\\':
|
||||||
|
q.append((pos + (direction[1], direction[0]), (direction[1], direction[0])))
|
||||||
|
elif tile == '/':
|
||||||
|
q.append((pos + (-direction[1], -direction[0]), (-direction[1], -direction[0])))
|
||||||
|
else:
|
||||||
|
assert False, tile
|
||||||
|
|
||||||
|
return len(set(x[0] for x in visited))
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(46, "input16_test"),
|
||||||
|
(7074, "input16"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(51, "input16_test"),
|
||||||
|
(7530, "input16"),
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
grid = Grid.from_data(self.getInput(), translate={'.': False})
|
||||||
|
return walk(grid, start=(Coordinate(0, 0), (1, 0)))
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
grid = Grid.from_data(self.getInput(), translate={'.': False})
|
||||||
|
max_tiles = 0
|
||||||
|
for x in grid.rangeX():
|
||||||
|
max_tiles = max(max_tiles, walk(grid, start=(Coordinate(x, 0), (0, 1))))
|
||||||
|
max_tiles = max(max_tiles, walk(grid, start=(Coordinate(x, grid.maxY), (0, -1))))
|
||||||
|
|
||||||
|
for y in grid.rangeY():
|
||||||
|
max_tiles = max(max_tiles, walk(grid, start=(Coordinate(0, y), (1, 0))))
|
||||||
|
max_tiles = max(max_tiles, walk(grid, start=(Coordinate(grid.maxX, -y), (-1, 0))))
|
||||||
|
|
||||||
|
return max_tiles
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
day = Day(2023, 16)
|
||||||
|
day.run(verbose=True)
|
||||||
110
inputs/input16
Normal file
110
inputs/input16
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
\........../.......-........|....\.......-..\/....|................\........../.|..././........\.........../..
|
||||||
|
...............\..\................/............\................./................../.........\..|....|/|-...
|
||||||
|
.../..........................\.....|.............-.......././.......-.|..../|.....-\........-....../.........
|
||||||
|
|..........................-..........-......./............................-..|................-..............
|
||||||
|
.....|......../...../.......-.\..............................-........|............|/.../../........./........
|
||||||
|
..\...|..-......\.........-\.||........|./................\....\........-..\..................../..\....-...|.
|
||||||
|
.|...........|............-........./.-.................|.|....../...............|..../..-..-...\...........|.
|
||||||
|
..............\............................................................./......................./\....-...
|
||||||
|
./........|...\.\..|..-....\............................|........./.................|/...............-........
|
||||||
|
\....\./.............../................../....|......./........../.\......./........-....\......../....../|..
|
||||||
|
./......--..........\..|.--........-...../......./........\.....|/..................|//...........|.........-.
|
||||||
|
.......|.....\-.\..-......-.........|.....................-/\.....-..........|.............-....\.....\.-.....
|
||||||
|
..--...\....-..|..................................-......-......\......-................\...../..-/....--.....
|
||||||
|
....-.........................\.\............|...............|.....-...\....|-................................
|
||||||
|
.................-..|.\..\....-..........|...../.....-...-.-../.............../................-..............
|
||||||
|
-..-......|..............................\.....\........|...../........\.................../..................
|
||||||
|
..............-.....-.|..........|.\..................|........|...........\.\...|........-...................
|
||||||
|
..\............/...\\........../...-..\.../.........\..|................../......\..-.../....................\
|
||||||
|
..................|...\......................./...|......../..............-./...\........\......./|...\..-..-.
|
||||||
|
.................................................-................|.........................................\.
|
||||||
|
......-...............................|./............./...........................-\/..../......\..........\..
|
||||||
|
......\....|..........................\.-|..........................|....................\.....\/...-.........
|
||||||
|
..\..-|...|.....-...../......./....|...............\................|..|.......\...........................-..
|
||||||
|
..\......-.......\.........\................|...........|....../...../..........-./...-|..................../.
|
||||||
|
................./.......\...|.....\....-................./......../..\...........-...|.../|................\.
|
||||||
|
..|..\./.........\.\.......................-......|....-..../.../................-.......\../.../...../.......
|
||||||
|
........../........./..|..-....................\\............\........................-......-......|.........
|
||||||
|
.../-....\..\..........\....\\......................................./........\...-.................\.........
|
||||||
|
................................../.................|..\.-..|................|/....-.........................|
|
||||||
|
...-.................||..../....................-..........................................|.-................
|
||||||
|
..//.\..........................|.....|-.............\.\......-....\.\.......\............-..............\-...
|
||||||
|
.......|.|..-........./..|........-.....|........................-...................-......\................-
|
||||||
|
..-..|..........|....-.............|.|/...../../..................\...\................../......|....|........
|
||||||
|
........\..././.............../.............../....-../.....|....\................|/.../.....|.|-..|..........
|
||||||
|
......|..........\...-./........-...............................\..........|.............|..\..|......./.....|
|
||||||
|
.............................-................................................|................/......\.../..-
|
||||||
|
......-........\..........-..../...............\............/.....\......|........................-.|.../.....
|
||||||
|
...\...............-....-........-............-...../....|.\.../.......\..-....................|........|.....
|
||||||
|
.............................-...\....|...|.......\............................-............\.................
|
||||||
|
....................|...-........-.........-..\................/....................../.|.......-.............
|
||||||
|
......\.........................../....-....|...........................................\...-.........|......\
|
||||||
|
.............\../\..............|\.\..........|\.../..................../\...................|\.......\.......
|
||||||
|
/.................../.\\.........................../...........-...-..........-..-............................
|
||||||
|
............\......../........-.........../........./.................-................./...........|.........
|
||||||
|
.........\.......|.......\........./.....................\..............\\....../...|-....\..|..-.....|.......
|
||||||
|
.|....-.............\.........\.\../.......-...........................\./..........................--\......\
|
||||||
|
........./..../................./.................\............................................./../.\........
|
||||||
|
.....-..............-.-...\/..|....-........./.....................\................./.\..........-...|....|..
|
||||||
|
........|...|.-.......|.......-............\.../....|...\............../............-.........................
|
||||||
|
........................|.....\........................./\/.........................|.........................
|
||||||
|
....\..././..........|.....\......................-................./.....|...............................|-..
|
||||||
|
.../.........../.-......\..../.................-...\.....-......\.....\..............//.|..............-..-...
|
||||||
|
....../............./-/.\...........\...\..|/........................-...../......\........-./\..........||...
|
||||||
|
.................................../............|....................../..|.....\......\............/.........
|
||||||
|
.....|....\...|.-./............................./..-....|.\.......................-../.-..-.........\.........
|
||||||
|
..........\...|../.......-|............-........../...../..........-......-../.-......|..../.-.../............
|
||||||
|
.-.........-............|/.......-........|...................-.........-........../.-........\..........|/...
|
||||||
|
.........\.........\....../....|...\\......-..........-................\................................-.....
|
||||||
|
............-...../......|...//........\-....|......../........./..................-................../....--.
|
||||||
|
...............|.................................|.../...\....................\................|...\.|........
|
||||||
|
..............\.........\.........\....|.-.......\.\........-.........../...|.....|..............\.......\....
|
||||||
|
........-.-.....|.../......-\..|.....-.........|.-................\......./....\...-.....\..|/...............|
|
||||||
|
....|.....................-...................\......\......-.......................-...../........./....\....
|
||||||
|
..|...|.......\./..-..............\.............................................\../....|.....................
|
||||||
|
..................-../........|.....-\.../................................................./..\...|......-...-
|
||||||
|
.....\......\........\.....................|...|../......../....../.\........./...............................
|
||||||
|
............../........../...........\..\/..|.\...|..........-................................\-..............
|
||||||
|
/...............\...|......\............/|...................|....././...\............................-.|.....
|
||||||
|
...........|................/-......\.....-.........-.............../......./............../|.................
|
||||||
|
..-...........|..\.............\....|/...............|..../..............\...............|./......|........./.
|
||||||
|
.....\\..|......\....\.......-.................\.-......................|........./...|.........|...|...-.....
|
||||||
|
-...../....|....../............./.......|/../\.............../...../-\.../-.......|........../..............\\
|
||||||
|
..........\....................../.................|...--../..................................................
|
||||||
|
.\.................../......|......-.............................//......|.../|.|....\.............\..........
|
||||||
|
.\-...........-.........|..................................../........|......../...-............\....-...-....
|
||||||
|
......\......|................-...../....|........-..\.....-........//................../.....|.........-.....
|
||||||
|
.....-..........-.|/.........-....................../......|.|./........................................./\\|.
|
||||||
|
...\................|.........../..-....|..-..........|........../....-....../......./.....-..\.....\\..../...
|
||||||
|
.....\.....-..................-...-..../....|....|.................|...\./.............../.......|.\/...../...
|
||||||
|
.||......../........../.-...|...........\.................\........-........|........................-...|....
|
||||||
|
........./......\......|...............\.\.................................................\.................|
|
||||||
|
..........................|....................|..../-...............|....|......../....-..................|..
|
||||||
|
.-........\.|......../...|...................|.........|............\.....|.......\........./.................
|
||||||
|
................-........................\...........|................../................-.............\......
|
||||||
|
.......\..........|.............../...|.-......................../....\.............-.......\./...............
|
||||||
|
..........\...........................................-........|.......\........./...-........\...............
|
||||||
|
../......./...\|...............-........\................./...\...................../.....-.-....-...........-
|
||||||
|
.\../......../....-\................................|.....-..|...............................-................
|
||||||
|
..........................\.....|................/.....\......../.............|..............\......./-..|....
|
||||||
|
|.........-.|............./......-.................|.......|...\/...........|...........................\\....
|
||||||
|
-..................|.........................-.............-.....|..../.........\...-/.....|............/\....
|
||||||
|
.........\.\....\...........|....-.../..............|.....|-.......\.............-......./......././.......\..
|
||||||
|
..../.....-...........................................\.../..\.|.......................-..//....-......|......
|
||||||
|
./-..................\..\....................................\......./.\....|.................................
|
||||||
|
...../....................................-....-/........................-/.........-.\...|......./..-.\......
|
||||||
|
.....|.............-.......|-..-.................................|-...........................\.|.....|.......
|
||||||
|
.........\-.............\.............../....-....|....-.|..........\............|.\...|.....-................
|
||||||
|
............/.......-....|./....|../..../......./..\.................-..................|.....................
|
||||||
|
../....-........./.....\...............\......-....|...\........../.....|........................\............
|
||||||
|
...../.\.............\.........................-..|.......|......-......|................./......./-..........
|
||||||
|
...\..........\.......................\.-..././.........|..\..................\...../...|.......|............-
|
||||||
|
........./............-..................................|.....................-..............................
|
||||||
|
........................|.....\.........\..............-..\..........||...../.\\./....../.....................
|
||||||
|
.................-.............\.../...........\...\......--................\.....\.............\....-........
|
||||||
|
.../-..........\.\............-.......-.............\..\.\...../........|...-..-..|..........\................
|
||||||
|
\.|..\......\-......./.........||..\.........................................................-...../..........
|
||||||
|
....|..........................................\......-..........\.../...\-........|..........................
|
||||||
|
.......-.......\..//./....|...............\.\..-...\....|....................-......\......\..-......../......
|
||||||
|
/..../../....-../....-....-......................\........./..........-/..\......./..\-.../..........|........
|
||||||
|
.|....\\........./....\.............-......--\...........|.........|..\...................../........./.\.....
|
||||||
10
inputs/input16_test
Normal file
10
inputs/input16_test
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|....
|
||||||
Loading…
Reference in New Issue
Block a user