day13
This commit is contained in:
parent
b3db0b2715
commit
5b317570bb
67
day13.py
Normal file
67
day13.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
from collections import deque
|
||||||
|
|
||||||
|
from tools.aoc import AOCDay
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from tools.coordinate import Coordinate
|
||||||
|
from tools.grid import Grid
|
||||||
|
|
||||||
|
|
||||||
|
class Day(AOCDay):
|
||||||
|
inputs = [
|
||||||
|
[
|
||||||
|
(11, "input13_test"),
|
||||||
|
(92, "input13"),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
(124, "input13"),
|
||||||
|
],
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_grid(self) -> Grid:
|
||||||
|
grid = Grid()
|
||||||
|
fav_number = self.getIntsFromInput()[0]
|
||||||
|
for x in range(50):
|
||||||
|
for y in range(50):
|
||||||
|
room_number = x * x + 3 * x + 2 * x * y + y + y * y + fav_number
|
||||||
|
set_bits = list(bin(room_number)[2:]).count("1")
|
||||||
|
if set_bits % 2 == 0:
|
||||||
|
grid.set(Coordinate(x, y))
|
||||||
|
|
||||||
|
return grid
|
||||||
|
|
||||||
|
def run_maze(self) -> tuple[int, int] | None:
|
||||||
|
if self.is_test():
|
||||||
|
target = Coordinate(7, 4)
|
||||||
|
else:
|
||||||
|
target = Coordinate(31, 39)
|
||||||
|
|
||||||
|
grid = self.get_grid()
|
||||||
|
pos = Coordinate(1, 1)
|
||||||
|
q = deque([(0, pos)])
|
||||||
|
seen = set()
|
||||||
|
rooms_reached = 0
|
||||||
|
while q:
|
||||||
|
dist, pos = q.popleft()
|
||||||
|
if pos == target:
|
||||||
|
return dist, rooms_reached
|
||||||
|
if pos in seen:
|
||||||
|
continue
|
||||||
|
seen.add(pos)
|
||||||
|
if dist <= 50:
|
||||||
|
rooms_reached += 1
|
||||||
|
for n in grid.getNeighboursOf(pos, includeDiagonal=False):
|
||||||
|
q.append((dist + 1, n))
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def part1(self) -> Any:
|
||||||
|
return self.run_maze()[0]
|
||||||
|
|
||||||
|
def part2(self) -> Any:
|
||||||
|
return self.run_maze()[1]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
day = Day(2016, 13)
|
||||||
|
day.run(verbose=True)
|
||||||
1
inputs/input13
Normal file
1
inputs/input13
Normal file
@ -0,0 +1 @@
|
|||||||
|
1350
|
||||||
1
inputs/input13_test
Normal file
1
inputs/input13_test
Normal file
@ -0,0 +1 @@
|
|||||||
|
10
|
||||||
Loading…
Reference in New Issue
Block a user