from pathlib import Path FILE = "input.txt" def main(): raw_lines = Path(FILE).read_text().splitlines() position = raw_lines[0].index('S') return traverse(position, raw_lines[1:], 0, dict()) def traverse(position: int, grid: list[str], level: int, memo: dict[tuple[int, int], int]) -> int: if (position, level) in memo.keys(): return memo[(position, level)] if not len(grid): return 1 if grid[0][position] == '^': memo[(position, level)] = ( traverse(position-1, grid[1:], level+1, memo) + traverse(position+1, grid[1:], level+1, memo) ) return memo[(position, level)] memo[(position, level)] = traverse(position, grid[1:], level+1, memo) return memo[(position, level)] if __name__ == "__main__": print(main())