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