day07
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
"""Day X: Advent of Code 2025."""
|
||||
|
||||
import time
|
||||
from collections import defaultdict
|
||||
from aoc import read_lines, read_input, read_grid, read_ints
|
||||
import numpy as np
|
||||
from functools import lru_cache
|
||||
|
||||
|
||||
|
||||
def traverse(start_pos: tuple[int, int], data: np.ndarray, visited: set, collisions: set):
|
||||
start_row, start_col = start_pos
|
||||
if (start_row, start_col) in visited:
|
||||
return
|
||||
|
||||
visited.add((start_row, start_col))
|
||||
row, col = data.shape
|
||||
r = start_row + 1
|
||||
while True:
|
||||
if r >= row:
|
||||
break
|
||||
v = data[r, start_col]
|
||||
if (r, start_col) in collisions:
|
||||
break
|
||||
if v == '^':
|
||||
collisions.add((r, start_col))
|
||||
if start_col + 1 < col:
|
||||
traverse((r, start_col + 1), data, visited, collisions)
|
||||
if start_col - 1 >= 0:
|
||||
traverse((r, start_col - 1), data, visited, collisions)
|
||||
break
|
||||
|
||||
r += 1
|
||||
|
||||
return
|
||||
|
||||
def traverse_2(start_pos: tuple[int, int], data: np.ndarray, cache=None):
|
||||
if cache is None:
|
||||
cache = {}
|
||||
if start_pos in cache:
|
||||
return cache[start_pos]
|
||||
|
||||
start_row, start_col = start_pos
|
||||
row, col = data.shape
|
||||
r = start_row + 1
|
||||
counter = 0
|
||||
|
||||
while True:
|
||||
if r >= row:
|
||||
cache[start_pos] = counter + 1
|
||||
return counter + 1
|
||||
v = data[r, start_col]
|
||||
|
||||
if v == '^':
|
||||
if start_col + 1 < col:
|
||||
counter += traverse_2((r, start_col + 1), data, cache)
|
||||
if start_col - 1 >= 0:
|
||||
counter += traverse_2((r, start_col - 1), data, cache)
|
||||
break
|
||||
|
||||
r += 1
|
||||
|
||||
cache[start_pos] = counter
|
||||
return counter
|
||||
|
||||
def part1(data: np.ndarray):
|
||||
rows, cols = np.where(data == 'S')
|
||||
if len(rows) == 0:
|
||||
raise ValueError("Start 'S' not found in grid")
|
||||
start_row, start_col = int(rows[0]), int(cols[0])
|
||||
collision = set()
|
||||
visited = set()
|
||||
traverse((start_row, start_col), data, visited, collision)
|
||||
print(data)
|
||||
return len(collision)
|
||||
|
||||
|
||||
def part2(data):
|
||||
rows, cols = np.where(data == 'S')
|
||||
if len(rows) == 0:
|
||||
raise ValueError("Start 'S' not found in grid")
|
||||
start_row, start_col = int(rows[0]), int(cols[0])
|
||||
counter = traverse_2((start_row, start_col), data)
|
||||
return counter
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
DAY = 7 # <- ändra till rätt dag
|
||||
data = read_grid(DAY)
|
||||
|
||||
t0 = time.perf_counter()
|
||||
p1 = part1(data)
|
||||
t1 = time.perf_counter()
|
||||
print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)")
|
||||
|
||||
t0 = time.perf_counter()
|
||||
p2 = part2(data)
|
||||
t1 = time.perf_counter()
|
||||
print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)")
|
||||
@@ -0,0 +1,142 @@
|
||||
......................................................................S......................................................................
|
||||
.............................................................................................................................................
|
||||
......................................................................^......................................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................................^.^.....................................................................
|
||||
.............................................................................................................................................
|
||||
....................................................................^.^.^....................................................................
|
||||
.............................................................................................................................................
|
||||
...................................................................^.^...^...................................................................
|
||||
.............................................................................................................................................
|
||||
..................................................................^.^...^.^..................................................................
|
||||
.............................................................................................................................................
|
||||
.................................................................^.^.^.^...^.................................................................
|
||||
.............................................................................................................................................
|
||||
................................................................^...^...^...^................................................................
|
||||
.............................................................................................................................................
|
||||
...............................................................^.^.^.^.^.....^...............................................................
|
||||
.............................................................................................................................................
|
||||
..............................................................^.^.^.^...^.^.^.^..............................................................
|
||||
.............................................................................................................................................
|
||||
.............................................................^.^.^.^.^.^.^.^...^.............................................................
|
||||
.............................................................................................................................................
|
||||
............................................................^...^.^.^.^...^.....^............................................................
|
||||
.............................................................................................................................................
|
||||
...........................................................^...^.^.^.^.^.^.....^.^...........................................................
|
||||
.............................................................................................................................................
|
||||
..........................................................^.^.^.^.^.^.^.^.^.....^.^..........................................................
|
||||
.............................................................................................................................................
|
||||
.........................................................^.^.^.^.....^.^...^.^.^...^.........................................................
|
||||
.............................................................................................................................................
|
||||
........................................................^.^.....^.^.^.^.^...^...^...^........................................................
|
||||
.............................................................................................................................................
|
||||
.......................................................^...^.^.^.^.....^...^.^.^.^...^.......................................................
|
||||
.............................................................................................................................................
|
||||
......................................................^.^...^.^...^...^.^.^.^...^.^...^......................................................
|
||||
.............................................................................................................................................
|
||||
.....................................................^...^.^.^...^.^.^.^.^.^.^.^.....^.^.....................................................
|
||||
.............................................................................................................................................
|
||||
....................................................^.^.^.^.^...^.^...^.^.^.^.^.^...^.^.^....................................................
|
||||
.............................................................................................................................................
|
||||
...................................................^.....^.......^...^...^.^.^...^.^.^...^...................................................
|
||||
.............................................................................................................................................
|
||||
..................................................^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^...^...^..................................................
|
||||
.............................................................................................................................................
|
||||
.................................................^...^.^.^.^.^.^...^.^.....^.......^...^.^.^.................................................
|
||||
.............................................................................................................................................
|
||||
................................................^.^.^.^...^.^.^.^.^.....^...^...^.^.^...^.^.^................................................
|
||||
.............................................................................................................................................
|
||||
...............................................^.^...^.........^.^...^...^...^.^.^.^.....^...^...............................................
|
||||
.............................................................................................................................................
|
||||
..............................................^...^.^.^.^...^...^...^.^.^.^.^...^...^.......^.^..............................................
|
||||
.............................................................................................................................................
|
||||
.............................................^.^.^.....^.^.^.^.^.^...^.^.^.^...^.....^...^.^...^.............................................
|
||||
.............................................................................................................................................
|
||||
............................................^...^.^.^.^.^.^...^.....^.^...^.......^.......^.^.^.^............................................
|
||||
.............................................................................................................................................
|
||||
...........................................^.^...^.^.....^.....^.^.^.^...^.^.^.^.^.^.^...^...^.^.^...........................................
|
||||
.............................................................................................................................................
|
||||
..........................................^.......^.....^.^.....^.^.....^.^.^...^...^...^.^.....^.^..........................................
|
||||
.............................................................................................................................................
|
||||
.........................................^.^.^...^.^...^.^...^.^.^...^.^...^.^.^...^.^.^.^.^.^.^.^.^.........................................
|
||||
.............................................................................................................................................
|
||||
........................................^.^...^.....^.^.^.^.^.....^.^.^.^.^.^.........^...^.^.^.^.^.^........................................
|
||||
.............................................................................................................................................
|
||||
.......................................^.^.^.^.^.^.^...^.^...^...^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.......................................
|
||||
.............................................................................................................................................
|
||||
......................................^...^.^.^.^.^...^...^...^.^.^...^.^.^.^...^.^.....^.^.^.......^.^......................................
|
||||
.............................................................................................................................................
|
||||
.....................................^.^.^.^.^.^.^...^.^.^.^.^.^.^.......^.^.^.^.^.^...^.....^.^.^...^.^.....................................
|
||||
.............................................................................................................................................
|
||||
....................................^.^.......^.^.^...^...^...^...^.^...^.^...^...^.^.^.^.^...^.^.^.....^....................................
|
||||
.............................................................................................................................................
|
||||
...................................^...^.^.^.^.^.......^.......^.^...^.^.^.^...^...^...^...^.^.^...^...^.^...................................
|
||||
.............................................................................................................................................
|
||||
..................................^...^.^...^.^...^...^.....^.......^.......^.^.^...^...^...^...^.^...^.^.^..................................
|
||||
.............................................................................................................................................
|
||||
.................................^.^.^.^...^.^.^.^.^...^.^.^.^.^.^.......^.^.^.^.^.^...^.^...^.^...^.^...^.^.................................
|
||||
.............................................................................................................................................
|
||||
................................^.^.^.^.^.^...^.^.^.^.^.^.^...^.^...^.......^.....^.^.......^.^...^.........^................................
|
||||
.............................................................................................................................................
|
||||
...............................^.^...^...^.^.^...^.^...^.^.^.^...^.^.^.^.^.......^.^.^.......^.^.^.^.^.^...^.^...............................
|
||||
.............................................................................................................................................
|
||||
..............................^.^.^.^.^.^.^.^.^...^.^.^...^.......^.^.......^...^.^.^...^.^.^...^.^...^.^.^...^..............................
|
||||
.............................................................................................................................................
|
||||
.............................^.^.^.....^.^.^...^.^.....^.......^.^.^.^.^.^.^.^.^...^...^.....^.^.^...^.......^.^.............................
|
||||
.............................................................................................................................................
|
||||
............................^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.....^.........^.^...^.^.^...^.....^.^.^.^............................
|
||||
.............................................................................................................................................
|
||||
...........................^...^.......^.^.^...........^.^.^.^.^.^.^.^.^.^.^...^.^.^...^.....^...^.^.^.^.....^...^...........................
|
||||
.............................................................................................................................................
|
||||
..........................^.....^.^.^...^.^.^.^.^.^.^.^.^.^...^.^.^.......^.^.^.^.^.^.....^.^.^.^...^.^.^.^.^.^...^..........................
|
||||
.............................................................................................................................................
|
||||
.........................^...^.......^.^.^...^.^.^.....^...........^.^.^.^...^...^.^.^.^.^.^.^.^.^.^.....^.^.^.^.^.^.........................
|
||||
.............................................................................................................................................
|
||||
........................^.^...^.^.^...^.^.^.^.....^.^...^.^.^...^.^.....^...............^.^.^.^...^.^.^.^.........^.^........................
|
||||
.............................................................................................................................................
|
||||
.......................^.^.....^.^.^.^.^.^.^.....^.^.^.^.^.^.....^.^.^...^.^.^...^.^.^.....^.....^.^...^.^.^.^.....^.^.......................
|
||||
.............................................................................................................................................
|
||||
......................^.^.^.^.^.......^.^.^.^.....^.^...^.^.^.^...^...^.......^...^.^.^...^.^.^...^.....^...^.^...^.^.^......................
|
||||
.............................................................................................................................................
|
||||
.....................^.....^.^.^.^.....^.^.^.^.....^.^...^.^.....^.^...^.^.^.^.....^...^.^.^.^...^.....^.^...^...^.^.^.^.....................
|
||||
.............................................................................................................................................
|
||||
....................^.^.^...^.^.^.^.^.^.^...^.....^.^.^...^.....^...^.....^.^.^...^.^.^.^.....^.^.^.^.^.^...^.^.^...^.^.^....................
|
||||
.............................................................................................................................................
|
||||
...................^.^.....^.^...^.......^.^.^.^.^.^.^.^.....^.....^.^.^.^.^...^...^.^.^.^.^...^...^...^.^.^.....^...^.^.^...................
|
||||
.............................................................................................................................................
|
||||
..................^.....^.^.^.^.^.^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^.^...^.^.^.^...^.^.^...^...^.^.^.^.^.^...^.^...^..................
|
||||
.............................................................................................................................................
|
||||
.................^.^...^.^.^.^.^...^.^.^...^.^.^.^.....^.^.^.^...^.^.^.^.^.....^...^.^.^.^...^.^.^...^...^...^.^.^.^.^.^.^.^.................
|
||||
.............................................................................................................................................
|
||||
................^.^.....^...^...^.^.^.^.^...^.^.^.^.^.^.^...^.^.^.......^.^.^.^.....^...........^...^.^.^.^...^...^.^.^.^.^.^................
|
||||
.............................................................................................................................................
|
||||
...............^.^.^.....^...^...^...^...^.^.^.....^.....^.^.^.^.^.^.^.....^.^.^.^.^.^...^...^.^.....^...^.^.^...^.^.^...^.^.^...............
|
||||
.............................................................................................................................................
|
||||
..............^.^.^...^.....^.^.^.^.^...^.......^.^.....^.^.^...^...^...^.^.....^.^.^.^...^.^.^.^...^.^.^...^.....^...^.^.^...^..............
|
||||
.............................................................................................................................................
|
||||
.............^.......^...^...^...^...^.^...^...^.^.^.^.^...^.....^...^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^.^.^.^.............
|
||||
.............................................................................................................................................
|
||||
............^.^...^.^.^.^...^...^.^...^.^.^...^.^.^...^.^.^...^...^...^...^.^.^.....^.^.^...^.....^.^.^.^.....^.^.^.....^.....^.^............
|
||||
.............................................................................................................................................
|
||||
...........^...^.^.^.^...^.^.^.....^.^...^...^.......^.^.^.^.^.^.^.^...^.^.^.^.....^...^.^...^...^...^.^.^.^.^.....^.^...^...^.^.^...........
|
||||
.............................................................................................................................................
|
||||
..........^.^.^.....^.^.^.^.^.^...^.^.^.^.^.^.^.^...^...^...^...^.^.^.^.^.....^.........^.^.......^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^.^..........
|
||||
.............................................................................................................................................
|
||||
.........^.^.....^.^.^...^.^.....^.^.^...^...^.^.....^.^.......^.^.^...^.^.^.....^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.....^...^.......^.^.........
|
||||
.............................................................................................................................................
|
||||
........^...^.^.^.^.^.....^...^.^.^...^.^.^.^...^.^.^.^...^.^.....^.^...^.^.^.^.^.^.^.^.......^.^.^.....^.^...^.....^...^.^.........^........
|
||||
.............................................................................................................................................
|
||||
.......^.^.^.^.^.^.^...^.^.....^.^.^.......^.^.^.^.^.^.^...^.......^.^...^...^...^.^.^.^...^...^...^.^.^.^...^.^.^.^.....^.^.^.^.....^.......
|
||||
.............................................................................................................................................
|
||||
......^.^.........^...^.^.^.....^.^.^.^.^.....^.^.^...^.^.....^.^.....^.^.^.^.^.^.^...^...^.^...^.^...^.^.^.^.^.^.^...^.^.^.....^.^.^.^......
|
||||
.............................................................................................................................................
|
||||
.....^.^.^.....^.^...^.^.^.^.^.^.^.^.^.^...^.^.^.^.^.^.^.^.^.^...^.^.....^...^.^.^.^...^...^.^...^.^.^.^.^...^.^...^.^.^.^.^.^.^.....^.^.....
|
||||
.............................................................................................................................................
|
||||
....^...^...^.^.^.....^...^.....^.^.^.....^...^.^.^.^.^.....^.^.....^.^.....^.^.^...^.^.^...^.^.^.^.^.^...^.^.^.^...^.^...^.........^.^.^....
|
||||
.............................................................................................................................................
|
||||
...^...^.^.......^...^.^.^.^...^...^.^...^.^.^.^.^...^.^.^.^.........^.^...^.^.^.^.^.^.^.^...^.^.....^...^.^.^...^.^.^.^.......^.^.^.^...^...
|
||||
.............................................................................................................................................
|
||||
..^.^.......^.........^.^.^.^.^.^...^.^.^.^.^.^...^.......^.^...^...^...^.^.^.^.^...^.^.^.^...^.^...^.....^...^.....^...^.^.^.^.^.^.^.^.^.^..
|
||||
.............................................................................................................................................
|
||||
.^.^...^.^...^.^...^.^.^.^.^.^.^...^.^.^.^.^.^.......^.^.......^.^.^.^.^.^...^.^...^.^...^.^...^.^.^.^.^.^.....^...^...^.^.^.^.^...^.^.^.^.^.
|
||||
.............................................................................................................................................
|
||||
Reference in New Issue
Block a user