day6 - slow-ish

This commit is contained in:
Stefan Harmuth 2024-12-06 07:06:23 +01:00
parent 5796d65b3d
commit c199f402e2
3 changed files with 209 additions and 0 deletions

69
day06.py Normal file
View File

@ -0,0 +1,69 @@
from tools.aoc import AOCDay
from typing import Any
from tools.coordinate import Coordinate
from tools.grid import Grid
DIRECTIONS = [(0, -1), (1, 0), (0, 1), (-1, 0)]
def walk_room(grid: Grid, start: Coordinate) -> tuple[set, bool]:
cur_pos = start
dir_index = 0
visited = set()
while grid.isWithinBoundaries(cur_pos):
if (cur_pos, dir_index) in visited:
return set(x[0] for x in visited), True
visited.add((cur_pos, dir_index))
next_pos = cur_pos + DIRECTIONS[dir_index]
while grid.get(next_pos):
dir_index = (dir_index + 1) % len(DIRECTIONS)
next_pos = cur_pos + DIRECTIONS[dir_index]
cur_pos = next_pos
return visited, False
class Day(AOCDay):
inputs = [
[
(41, "input6_test"),
(5208, "input6"),
],
[
(6, "input6_test"),
(1972, "input6"),
],
]
def parse_input(self) -> tuple[Grid, Coordinate]:
grid = Grid.from_data(self.getInput(), translate={".": False, "#": True})
start = list(grid.find("^"))[0]
grid.set(start, False)
return grid, start
def part1(self) -> Any:
grid, cur_pos = self.parse_input()
return len(set(x[0] for x in walk_room(grid, cur_pos)[0]))
def part2(self) -> Any:
grid, start = self.parse_input()
visits = set(x[0] for x in walk_room(grid, start)[0])
loops = 0
for obs_pos in visits:
if obs_pos == start:
continue
grid.set(obs_pos, True)
loops += walk_room(grid, start)[1]
grid.set(obs_pos, False)
return loops
if __name__ == "__main__":
day = Day(2024, 6)
day.run(verbose=True)

130
inputs/input6 Normal file
View File

@ -0,0 +1,130 @@
...............................#.........#............#...#.............................#....................#.....#........##....
..##..##.#.#....................##....#..#.....#...............#..#.....#.....................#...#.............#...#...#.........
...................#............#..................................................#............................#..#..............
............#...................................................#.........................#..#....#....................#..........
.#...........#...............................#..#....................................#............#.#............#................
.........................#..........................................#.................#...#.....#.#...............................
..#..................#......................................#......#........#.......#..........#.........#..#.........#...........
..........#..............#....................................#................................................#........#........#
..#...............................................................................................................#.#..#..........
....#....................##...................#..#....#....#.........#.......#.....................................#..............
........#...................#.......#.........................................#.........#........#....................#...........
................................................................#.......#......#...........#................#.....................
...........................................#.............#...........##.#................................#...................#....
............................#......#........#...#.................................................................................
.......#.............#...............................#.............................................#.............#.........#......
......................................................#.........................#....#................................#...........
...............#...........................................#..........#.........#..#..................#...........................
.....................................##...#................................#..#......................#.......#..........#.........
..............#.......#....................#.....................................................#.......#...................##..#
...............................................#.............#..#...#.....#..................................................#....
.....................................#........#...........................................................#......#................
........##............#...............................#....#......................................................................
.....#............#...................................................................#.............................#.............
........#...............#......#..........#........#.....#........#..........#...............................................#..#.
..................#.............#........#......#.................................................#..........................#....
.................................#............#...............................................................#..##...............
......................................#.#...........#........#.................................................................#..
...........#...........#..............#..#.#...........#............................................#...#.....................#...
....##......................#..........#..............#.............#.....#............................#....................#.....
..................#...................#..........#............................................#...#.....................#.........
.....................#...........#.........................................................#......................................
.#..............#....#..#.#...##.........#....#.............#..........#.......#...#.............................#.........#...#..
..................#...............#.....................#..#.....................#........#.......................................
......#..#......#...#..................##.............#...................#.....#.....#................................#........#.
....................#.#................#....#..................................................#............#................#....
...........................#..#.#......#........................#......#..........................................................
..#.#...............................................................#.#........................#.....................#..#.........
...#..............................#......................................................#...#....................#.#.............
....................#.......#...........#.....#.......................#........#...........................##.....................
............#.........................................................#..............................................#.........#..
..................#.#..............................#......#..................................#..........#......#..#...............
....##................#.#..................#.....#...........................................#.......................##...........
......#...........................#......#.......#..........#................#..#......#..........#..............#..#.............
........#.................#...#.........................................#..........#.........#...................................#
.#..........#....#.....#.............#...........#..................#.................#...#.......................................
...........................................................#......#...#...........................................##........#....#
............#.............................................................................#..........................#............
.........#..............................................................................................#.........#.....#......#..
.........#.......................................................................#........................#..#.....#.#............
............................#.............#..........#..#...........#......#..............#..........................#............
..#.#............#.........#.........#..................#.......................#............................................#....
...#......................#......................................................#...........#..........................#.........
.#....#...............................................................................................................#...........
.#..#................#................................................................#....^.................#.............#......
........................................................................................#.....................#...................
........##................#.............................#.........................................................................
.#.#.................#.....................#.....................#..........................#.................#...............#...
........#....................................................................................................#....................
##......#.............................#.......#........................................................................#.....##...
..........#..........................................#.................#.....#............................................#.......
......................#........................#.......................................#............#.............................
.............................#.#.......................................................................................#..........
...#.........#.....#........................#.................#...........#.....................#.................................
.........#...........................................................................#...........................#................
......#...#............#..........#........................#...................#...........#................................#.....
.....#...#....#..........................................................#......................#.....................#..........#
#.............#....................#...............................#.......#.#.............#.....................#.............#..
............................................................#.......#...................#.................................#......#
...#..#......................................#.........................................#..#.#.......##.......#............#..#....
.....#.#...#...#.#................................................................................................................
...............................................................................#........#...................#..#.........#....#...
......#.........#.............#........................................................................................#.##.......
.......................#...................................................................................................#......
.........................................................#....................................#...................##.........#....
.#..............#.#.#.............................#........................#........................#...................#.#.......
.........#.....#..........................................................................#.................#.................#...
.........#..............#...............................#.........#......#.#......................................................
......................................................................................................#....#............#.......#.
.....#.................#.......#.....#..................................#...............................................#.........
...............................................................#.............#.................................................#..
...#.....................................................................#...#.......#......#.....................................
.................................#...#.#............................................................#...#.........................
...........#..#.................................#....#...................#.............#.........#................................
..................................................#..#...........#...........................#....................................
.....#.....................................#......#......#...........................................................#............
..............#..........................................#.........#.............#..#............................#................
..........................................................................#..........#.......................#....................
.......##................#................................................................................................#.......
.#.....#.....#..................#............#......#............................#.........#......................................
..##....#..................................................................................................................#......
.......#......................#..................#...#.....................................#............#..............#..........
...............................#................#...#.................................##......................#...................
...............#..............................................................................................#.....##.......#....
................................#..........#........................................#..#..........................................
..................................................#.................................................................#.............
....................#....#.....................#.................................#.........#.....#......#......................#..
................#.............#............#................#........................................................#..........#.
.#.......#......##...................#....#..............................................................#.................#......
.........#.#............................................................................#........................#................
...............#........##.....#.....................................#..#...........#......#......................................
......#.............................................###..#.........#..............#...........................#.......#...........
.....................................#.........#...........................................................##.....................
.#....#.......................#.........#................................................................................#..#.....
....#..#.......................................................................................................##............#....
..#...................................#....#......#....................#...............................#..........................
...................#....##........................................##..........................................#...................
..........#.........#.............................................................#..#.........#...#............#.......#..#......
....#...........#...##.........................#......................#.........#..#..............................................
....................#.....#.....................................#...............................................................#.
.........#.......................#.................#...#....................................................#.#......#........#...
.................#.................................#..#..............#..........#...#.........#........#.##....##.................
.............#...........................#......................#.......................#.........................................
...............#.....#......#........#....#.......................................#.............................#.................
.............#.....##.........#...#...............................................................................................
.................................................................................#.............#.....#...#..#.....................
.................................#......#.#...#.......#......................................#......#..........................#..
#..#....................................#..#......................................................................................
...#......#.......................#..........................#...........#.#................#.#.......#...........................
#....#...............#..........................#....................#....#................................#............##........
...........#........................#..........#......................................#...................................#.....#.
......#................................#................#.............................#.........#...#........#....................
.............#................#...........#.#...........#.......................................#...........#.#...................
.....#......................#..........................#.................................#.............#............#....#........
.....#.........#.#..............................................................................#...................##............
......#.....#..#.............#...............#......#..#.#.................................#...............#...#..................
....................#.......................#...................#........................#...................#..#.....##..........
...............#...........#..#...........................................#........................#....#.........................
.....................................#...................#.#............#......................................#..................
.....#......................#.#....................#.............................................#...........................#..#.
..........#........#................#.........#...........................................#....#..#...........#..####..........#..

10
inputs/input6_test Normal file
View File

@ -0,0 +1,10 @@
....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...