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)