From 3b1b3fe99e6953b53a44c070d227ad36341e71c4 Mon Sep 17 00:00:00 2001 From: Botond Hende Date: Wed, 11 Dec 2024 10:20:30 +0100 Subject: 2024 day9-10 --- 2024/day10/solve2.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 2024/day10/solve2.py (limited to '2024/day10/solve2.py') diff --git a/2024/day10/solve2.py b/2024/day10/solve2.py new file mode 100644 index 0000000..df633ad --- /dev/null +++ b/2024/day10/solve2.py @@ -0,0 +1,37 @@ +def move_on_trail(map_positions: list[list[int]], current_row: int, current_col: int, next_height: int) -> int: + summits_found = 0 + + row_count = len(map_positions) + col_count = len(map_positions[0]) + for dir_row, dir_col in ((-1, 0), (1, 0), (0, -1), (0, 1)): + next_row = current_row + dir_row + next_col = current_col + dir_col + + if not (0 <= next_row < row_count and 0 <= next_col < col_count): + continue + + if map_positions[next_row][next_col] == next_height: + if next_height == 9: + summits_found += 1 + else: + summits_found += move_on_trail(map_positions, next_row, next_col, next_height + 1) + + return summits_found + + +def get_trailhead_rating(map_positions: list[list[int]], head_row: int, head_col: int) -> int: + return move_on_trail(map_positions, head_row, head_col, 1) + + +data = [] +with open("input") as f: + for line in f: + data.append([int(elem) for elem in tuple(line.strip())]) + +count = 0 +for row, line in enumerate(data): + for col, height in enumerate(line): + if height == 0: + count += get_trailhead_rating(data, row, col) + +print(count) -- cgit v1.2.3-70-g09d2