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)
|