2025 #5
1 changed files with 50 additions and 0 deletions
50
2025-python/output/day_07.py
Normal file
50
2025-python/output/day_07.py
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
import functools
|
||||||
|
from output import grid
|
||||||
|
|
||||||
|
|
||||||
|
def solve(data):
|
||||||
|
G = grid(data, o="^")
|
||||||
|
p1 = set()
|
||||||
|
p2 = 0
|
||||||
|
H = len(data.split())
|
||||||
|
W = len(data.split()[0])
|
||||||
|
S = (0, data.split()[0].index("S"))
|
||||||
|
Q = [S]
|
||||||
|
while Q:
|
||||||
|
y, x = Q.pop(0)
|
||||||
|
if y == H:
|
||||||
|
continue
|
||||||
|
if (y, x) in p1:
|
||||||
|
continue
|
||||||
|
if (y, x) in G:
|
||||||
|
Q.append((y, x - 1))
|
||||||
|
Q.append((y, x + 1))
|
||||||
|
p1.add((y, x))
|
||||||
|
else:
|
||||||
|
Q.append((y + 1, x))
|
||||||
|
p1 = len(p1)
|
||||||
|
|
||||||
|
@functools.cache
|
||||||
|
def _timelines(p):
|
||||||
|
y, x = p
|
||||||
|
if not 0 <= y < H or not 0 <= x < W:
|
||||||
|
return 1
|
||||||
|
if p in G:
|
||||||
|
return _timelines((y, x - 1)) + _timelines((y, x + 1))
|
||||||
|
return _timelines((y + 1, x))
|
||||||
|
|
||||||
|
p2 = _timelines(S)
|
||||||
|
return p1, p2
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
with open("./input/07.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
|
p1, p2 = solve(inp)
|
||||||
|
|
||||||
|
print(p1)
|
||||||
|
print(p2)
|
||||||
|
|
||||||
|
assert p1 == 1539
|
||||||
|
assert p2 == 6479180385864
|
||||||
Loading…
Add table
Reference in a new issue