From cc116315f0af22a1184c50bada59b1b4aa867aa9 Mon Sep 17 00:00:00 2001 From: Fschatbot Date: Wed, 11 Dec 2024 16:40:50 +0530 Subject: [PATCH] Completed day 10 of year 2024 --- 2024/10.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 2024/10.py diff --git a/2024/10.py b/2024/10.py new file mode 100644 index 0000000..872de42 --- /dev/null +++ b/2024/10.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +def parse(data): + # Converting to a 2D int array! + return [[int(x) for x in line] for line in data.split('\n')] + +split_data = parse +completed = True +raw_data = None # Not To be touched + +def part1(data): + movement = [(0, 1), (0, -1), (1, 0), (-1, 0)] + + def calc_score(y0, x0): + seen = set() + queue = [(x0, y0)] + score = 0 + + while queue: + x, y = queue.pop(0) + + for dx, dy in movement: + nx, ny = x + dx, y + dy + if not (0 <= nx < len(data[0]) and 0 <= ny < len(data)): continue # Out of bounds + if data[ny][nx] - data[y][x] != 1: continue # Min increase of 1 + if f"{nx},{ny}" in seen: continue # Avoid repeats + + seen.add(f"{nx},{ny}") + if data[ny][nx] == 9: + score += 1 + else: + queue.append((nx, ny)) + + return score + + cum = 0 + for y, line in enumerate(data): + for x, height in enumerate(line): + if height != 0: continue + cum += calc_score(y, x) + + + return cum + +def part2(data): + movement = [(0, 1), (0, -1), (1, 0), (-1, 0)] + + def calc_score(y0, x0): + # Same stuff but removed the "seen" part! + queue = [(x0, y0)] + score = 0 + + while queue: + x, y = queue.pop(0) + + for dx, dy in movement: + nx, ny = x + dx, y + dy + if not (0 <= nx < len(data[0]) and 0 <= ny < len(data)): continue # Out of bounds + if data[ny][nx] - data[y][x] != 1: continue # Min increase of 1 + if data[ny][nx] == 9: + score += 1 + else: + queue.append((nx, ny)) + + return score + + cum = 0 + for y, line in enumerate(data): + for x, height in enumerate(line): + if height != 0: continue + cum += calc_score(y, x) + + + return cum \ No newline at end of file