generated from public/aoc_template
Compare commits
2 Commits
2d8384c29e
...
89e37bc290
| Author | SHA1 | Date | |
|---|---|---|---|
| 89e37bc290 | |||
| c199f402e2 |
69
day06.py
Normal file
69
day06.py
Normal 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
130
inputs/input6
Normal file
@ -0,0 +1,130 @@
|
||||
...............................#.........#............#...#.............................#....................#.....#........##....
|
||||
..##..##.#.#....................##....#..#.....#...............#..#.....#.....................#...#.............#...#...#.........
|
||||
...................#............#..................................................#............................#..#..............
|
||||
............#...................................................#.........................#..#....#....................#..........
|
||||
.#...........#...............................#..#....................................#............#.#............#................
|
||||
.........................#..........................................#.................#...#.....#.#...............................
|
||||
..#..................#......................................#......#........#.......#..........#.........#..#.........#...........
|
||||
..........#..............#....................................#................................................#........#........#
|
||||
..#...............................................................................................................#.#..#..........
|
||||
....#....................##...................#..#....#....#.........#.......#.....................................#..............
|
||||
........#...................#.......#.........................................#.........#........#....................#...........
|
||||
................................................................#.......#......#...........#................#.....................
|
||||
...........................................#.............#...........##.#................................#...................#....
|
||||
............................#......#........#...#.................................................................................
|
||||
.......#.............#...............................#.............................................#.............#.........#......
|
||||
......................................................#.........................#....#................................#...........
|
||||
...............#...........................................#..........#.........#..#..................#...........................
|
||||
.....................................##...#................................#..#......................#.......#..........#.........
|
||||
..............#.......#....................#.....................................................#.......#...................##..#
|
||||
...............................................#.............#..#...#.....#..................................................#....
|
||||
.....................................#........#...........................................................#......#................
|
||||
........##............#...............................#....#......................................................................
|
||||
.....#............#...................................................................#.............................#.............
|
||||
........#...............#......#..........#........#.....#........#..........#...............................................#..#.
|
||||
..................#.............#........#......#.................................................#..........................#....
|
||||
.................................#............#...............................................................#..##...............
|
||||
......................................#.#...........#........#.................................................................#..
|
||||
...........#...........#..............#..#.#...........#............................................#...#.....................#...
|
||||
....##......................#..........#..............#.............#.....#............................#....................#.....
|
||||
..................#...................#..........#............................................#...#.....................#.........
|
||||
.....................#...........#.........................................................#......................................
|
||||
.#..............#....#..#.#...##.........#....#.............#..........#.......#...#.............................#.........#...#..
|
||||
..................#...............#.....................#..#.....................#........#.......................................
|
||||
......#..#......#...#..................##.............#...................#.....#.....#................................#........#.
|
||||
....................#.#................#....#..................................................#............#................#....
|
||||
...........................#..#.#......#........................#......#..........................................................
|
||||
..#.#...............................................................#.#........................#.....................#..#.........
|
||||
...#..............................#......................................................#...#....................#.#.............
|
||||
....................#.......#...........#.....#.......................#........#...........................##.....................
|
||||
............#.........................................................#..............................................#.........#..
|
||||
..................#.#..............................#......#..................................#..........#......#..#...............
|
||||
....##................#.#..................#.....#...........................................#.......................##...........
|
||||
......#...........................#......#.......#..........#................#..#......#..........#..............#..#.............
|
||||
........#.................#...#.........................................#..........#.........#...................................#
|
||||
.#..........#....#.....#.............#...........#..................#.................#...#.......................................
|
||||
...........................................................#......#...#...........................................##........#....#
|
||||
............#.............................................................................#..........................#............
|
||||
.........#..............................................................................................#.........#.....#......#..
|
||||
.........#.......................................................................#........................#..#.....#.#............
|
||||
............................#.............#..........#..#...........#......#..............#..........................#............
|
||||
..#.#............#.........#.........#..................#.......................#............................................#....
|
||||
...#......................#......................................................#...........#..........................#.........
|
||||
.#....#...............................................................................................................#...........
|
||||
.#..#................#................................................................#....^.................#.............#......
|
||||
........................................................................................#.....................#...................
|
||||
........##................#.............................#.........................................................................
|
||||
.#.#.................#.....................#.....................#..........................#.................#...............#...
|
||||
........#....................................................................................................#....................
|
||||
##......#.............................#.......#........................................................................#.....##...
|
||||
..........#..........................................#.................#.....#............................................#.......
|
||||
......................#........................#.......................................#............#.............................
|
||||
.............................#.#.......................................................................................#..........
|
||||
...#.........#.....#........................#.................#...........#.....................#.................................
|
||||
.........#...........................................................................#...........................#................
|
||||
......#...#............#..........#........................#...................#...........#................................#.....
|
||||
.....#...#....#..........................................................#......................#.....................#..........#
|
||||
#.............#....................#...............................#.......#.#.............#.....................#.............#..
|
||||
............................................................#.......#...................#.................................#......#
|
||||
...#..#......................................#.........................................#..#.#.......##.......#............#..#....
|
||||
.....#.#...#...#.#................................................................................................................
|
||||
...............................................................................#........#...................#..#.........#....#...
|
||||
......#.........#.............#........................................................................................#.##.......
|
||||
.......................#...................................................................................................#......
|
||||
.........................................................#....................................#...................##.........#....
|
||||
.#..............#.#.#.............................#........................#........................#...................#.#.......
|
||||
.........#.....#..........................................................................#.................#.................#...
|
||||
.........#..............#...............................#.........#......#.#......................................................
|
||||
......................................................................................................#....#............#.......#.
|
||||
.....#.................#.......#.....#..................................#...............................................#.........
|
||||
...............................................................#.............#.................................................#..
|
||||
...#.....................................................................#...#.......#......#.....................................
|
||||
.................................#...#.#............................................................#...#.........................
|
||||
...........#..#.................................#....#...................#.............#.........#................................
|
||||
..................................................#..#...........#...........................#....................................
|
||||
.....#.....................................#......#......#...........................................................#............
|
||||
..............#..........................................#.........#.............#..#............................#................
|
||||
..........................................................................#..........#.......................#....................
|
||||
.......##................#................................................................................................#.......
|
||||
.#.....#.....#..................#............#......#............................#.........#......................................
|
||||
..##....#..................................................................................................................#......
|
||||
.......#......................#..................#...#.....................................#............#..............#..........
|
||||
...............................#................#...#.................................##......................#...................
|
||||
...............#..............................................................................................#.....##.......#....
|
||||
................................#..........#........................................#..#..........................................
|
||||
..................................................#.................................................................#.............
|
||||
....................#....#.....................#.................................#.........#.....#......#......................#..
|
||||
................#.............#............#................#........................................................#..........#.
|
||||
.#.......#......##...................#....#..............................................................#.................#......
|
||||
.........#.#............................................................................#........................#................
|
||||
...............#........##.....#.....................................#..#...........#......#......................................
|
||||
......#.............................................###..#.........#..............#...........................#.......#...........
|
||||
.....................................#.........#...........................................................##.....................
|
||||
.#....#.......................#.........#................................................................................#..#.....
|
||||
....#..#.......................................................................................................##............#....
|
||||
..#...................................#....#......#....................#...............................#..........................
|
||||
...................#....##........................................##..........................................#...................
|
||||
..........#.........#.............................................................#..#.........#...#............#.......#..#......
|
||||
....#...........#...##.........................#......................#.........#..#..............................................
|
||||
....................#.....#.....................................#...............................................................#.
|
||||
.........#.......................#.................#...#....................................................#.#......#........#...
|
||||
.................#.................................#..#..............#..........#...#.........#........#.##....##.................
|
||||
.............#...........................#......................#.......................#.........................................
|
||||
...............#.....#......#........#....#.......................................#.............................#.................
|
||||
.............#.....##.........#...#...............................................................................................
|
||||
.................................................................................#.............#.....#...#..#.....................
|
||||
.................................#......#.#...#.......#......................................#......#..........................#..
|
||||
#..#....................................#..#......................................................................................
|
||||
...#......#.......................#..........................#...........#.#................#.#.......#...........................
|
||||
#....#...............#..........................#....................#....#................................#............##........
|
||||
...........#........................#..........#......................................#...................................#.....#.
|
||||
......#................................#................#.............................#.........#...#........#....................
|
||||
.............#................#...........#.#...........#.......................................#...........#.#...................
|
||||
.....#......................#..........................#.................................#.............#............#....#........
|
||||
.....#.........#.#..............................................................................#...................##............
|
||||
......#.....#..#.............#...............#......#..#.#.................................#...............#...#..................
|
||||
....................#.......................#...................#........................#...................#..#.....##..........
|
||||
...............#...........#..#...........................................#........................#....#.........................
|
||||
.....................................#...................#.#............#......................................#..................
|
||||
.....#......................#.#....................#.............................................#...........................#..#.
|
||||
..........#........#................#.........#...........................................#....#..#...........#..####..........#..
|
||||
10
inputs/input6_test
Normal file
10
inputs/input6_test
Normal file
@ -0,0 +1,10 @@
|
||||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
||||
Loading…
Reference in New Issue
Block a user