diff --git a/2024-python/output/day_06.py b/2024-python/output/day_06.py new file mode 100644 index 0000000..1deba2a --- /dev/null +++ b/2024-python/output/day_06.py @@ -0,0 +1,56 @@ +from output import cw, matrix + + +def solve(data): + M, H, W = matrix(data) + + y, x = [(r, c) for r in range(H) for c in range(W) if M[r][c] == "^"][0] + delta_y, delta_x = (-1, 0) + seen, _ = travel(M, H, W, y, x, delta_y, delta_x) + + p1 = len(seen) + + p2 = 0 + for row, col in seen: + grid = [list(row) for row in M] + grid[row][col] = "#" + _, loop_found = travel(grid, H, W, y, x, delta_y, delta_x) + + if loop_found: + p2 += 1 + + return p1, p2 + + +def travel(M, H, W, y, x, delta_y, delta_x): + seen = set() + hit = set() + loop_found = False + + while True: + seen.add((y, x)) + + if y == 0 or y == H - 1 or x == 0 or x == W - 1: + break + + if M[y + delta_y][x + delta_x] == "#": + if (y + delta_y, x + delta_x, delta_y, delta_x) in hit: + loop_found = True + break + + hit.add((y + delta_y, x + delta_x, delta_y, delta_x)) + delta_y, delta_x = cw(delta_y, delta_x) + else: + y, x = y + delta_y, x + delta_x + + return seen, loop_found + + +if __name__ == "__main__": + with open("./input/06.txt", "r") as f: + inp = f.read().strip() + + p1, p2 = solve(inp) + + print(p1) + print(p2)