summaryrefslogtreecommitdiff
path: root/2024/day6/solve.py
blob: 7e8a97214d1d8364dcdedae32728aba87bc386f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import sys

lines = []
with open("input") as f:
    for line in f.readlines():
        lines.append(list(line.strip()))

found_guard = False
guard_row_idx = None
guard_col_idx = None
direction = None

directions = [(-1, 0), (0, 1), (1, 0), (0, -1)]

for line_idx, line in enumerate(lines):
    for icon_idx, guard_icon in enumerate(("^", ">", "v", "<")):
        if guard_icon in line:
            guard_row_idx = line_idx
            guard_col_idx = line.index(guard_icon)
            direction = directions[icon_idx]
            found_guard = True
            break

    if found_guard:
        break

if not found_guard:
    sys.exit("Could not found guard.")

row_count = len(lines)
col_count = len(lines[0])
while True:
    lines[guard_row_idx][guard_col_idx] = "X"
    new_row_idx = guard_row_idx + direction[0]
    new_col_idx = guard_col_idx + direction[1]

    if new_row_idx < 0 or new_row_idx >= row_count or new_col_idx < 0 or new_col_idx >= col_count:
        break

    if lines[new_row_idx][new_col_idx] == "#":
        dir_idx = directions.index(direction)
        if dir_idx == len(directions) - 1:
            dir_idx = 0
        else:
            dir_idx += 1
        direction = directions[dir_idx]
    else:
        guard_row_idx = new_row_idx
        guard_col_idx = new_col_idx

count = 0
for line in lines:
    count += line.count("X")

print(count)