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