advent24-llm / day06 /solution_gemini-1.5-pro.py
jerpint's picture
Add solution files
a4da721
raw
history blame
1.91 kB
def solve():
file = "input.txt"
grid = []
with open(file, 'r') as f:
for line in f:
grid.append(list(line.strip()))
rows = len(grid)
cols = len(grid[0])
def find_guard():
for r in range(rows):
for c in range(cols):
if grid[r][c] == '^':
return r, c, 0 # row, col, direction (0: up, 1: right, 2: down, 3: left)
def is_valid(r, c):
return 0 <= r < rows and 0 <= c < cols
def move_guard(r, c, direction):
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
nr, nc = r + dr[direction], c + dc[direction]
if is_valid(nr, nc) and grid[nr][nc] != '#':
return nr, nc, direction
else:
return r, c, (direction + 1) % 4
# Part 1
visited = set()
r, c, direction = find_guard()
while is_valid(r, c):
visited.add((r, c))
r, c, direction = move_guard(r, c, direction)
print(len(visited))
# Part 2
def simulate_with_obstacle(obstacle_r, obstacle_c):
temp_grid = [row[:] for row in grid]
temp_grid[obstacle_r][obstacle_c] = '#'
visited = set()
r, c, direction = find_guard()
while (r,c) not in visited and is_valid(r,c):
visited.add((r,c))
dr = [-1, 0, 1, 0]
dc = [0, 1, 0, -1]
nr, nc = r + dr[direction], c + dc[direction]
if is_valid(nr, nc) and temp_grid[nr][nc] != '#':
r,c = nr,nc
else:
direction = (direction + 1) % 4
return (r,c) in visited
loop_count = 0
start_r, start_c, _ = find_guard()
for r in range(rows):
for c in range(cols):
if grid[r][c] == '.' and (r, c) != (start_r, start_c):
if simulate_with_obstacle(r, c):
loop_count += 1
print(loop_count)
solve()