advent24-llm / day10 /solution_jerpint.py
jerpint's picture
Add solution files
a4da721
raw
history blame
2.1 kB
def load_data(file):
with open(file) as f:
data = f.readlines()
return [list(line.strip("\n")) for line in data]
def find_zeros(grid):
M = len(grid)
N = len(grid[0])
positions = []
for i in range(M):
for j in range(N):
if grid[i][j] == "0":
positions.append((i,j))
return positions
def get_neighbors(grid, pos):
M = len(grid)
N = len(grid[0])
directions = [(0, 1), (1, 0), (-1, 0), (0, -1)]
ns = []
i, j = pos
for dx, dy in directions:
if (i+dx) in range(M) and (j+dy) in range(N):
ns.append((i+dx, j+dy))
return ns
def val_at_pos(grid, pos):
i, j = pos
return int(grid[i][j]) if grid[i][j] != "." else -100
def get_trailhead_score(grid, zero):
"""bfs algorithm."""
score = 0
i,j = zero
q = [(i,j)]
visited = set((i,j))
while len(q) > 0:
pos = q.pop(0)
cur_val = val_at_pos(grid, pos)
neighbors = get_neighbors(grid, pos)
for n_pos in neighbors:
n_val = val_at_pos(grid, n_pos)
if (n_val - cur_val) == 1:
q.append(n_pos)
if n_val == 9 and n_pos not in visited:
score += 1
visited.add(n_pos)
return score
grid = load_data("input.txt")
zeros = find_zeros(grid)
total = 0
for zero in zeros:
total += get_trailhead_score(grid, zero)
print(total)
## Part 2
def get_trailhead_rating(grid, zero):
"""bfs algorithm."""
score = 0
i,j = zero
q = [(i,j)]
visited = set((i,j))
while len(q) > 0:
pos = q.pop(0)
cur_val = val_at_pos(grid, pos)
neighbors = get_neighbors(grid, pos)
for n_pos in neighbors:
n_val = val_at_pos(grid, n_pos)
if (n_val - cur_val) == 1:
q.append(n_pos)
if n_val == 9:
score += 1
return score
grid = load_data("input.txt")
zeros = find_zeros(grid)
total = 0
for zero in zeros:
total += get_trailhead_rating(grid, zero)
print(total)