summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2024-12-10 12:00:00 +0000
committermhsn <mail@mhsn.net>2024-12-10 12:00:00 +0000
commite8b35a3ea1b040af0b500730b0e94bf1ac54a1ff (patch)
treeb10960975fa6156d71ec6f8257c5d3ab3a7fd6b2
parent72ca35561ebbe8a148a8a62973b7615bc982f28f (diff)
downloadaoc-e8b35a3ea1b040af0b500730b0e94bf1ac54a1ff.tar.gz
aoc-e8b35a3ea1b040af0b500730b0e94bf1ac54a1ff.zip
2024-10 python p1,p2
-rw-r--r--2024/10/python/main.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/2024/10/python/main.py b/2024/10/python/main.py
new file mode 100644
index 0000000..4e85b49
--- /dev/null
+++ b/2024/10/python/main.py
@@ -0,0 +1,41 @@
+from fileinput import input
+
+grid = [[int(c) for c in line.strip()] for line in input()]
+
+starts = {
+ (idx, idy) for idy, line in enumerate(grid) for idx, n in enumerate(line) if n == 0
+}
+
+# print(*grid, sep="\n")
+# print(starts)
+
+
+def score_trailhead(start, gold):
+ score = 0
+ q = [start]
+ seen = set()
+ while q:
+ x, y = q.pop()
+ seen.add((x, y))
+
+ h = grid[y][x]
+ if h == 9:
+ score += 1
+ continue
+ for dx, dy in [(0, 1), (0, -1), (1, 0), (-1, 0)]:
+ nx, ny = x + dx, y + dy
+ if ((nx, ny) in seen and not gold) or not (
+ 0 <= nx < len(grid) and 0 <= ny < len(grid[0])
+ ):
+ continue
+
+ if grid[ny][nx] == h + 1:
+ q.append((nx, ny))
+ return score
+
+
+silver = sum(score_trailhead(start, False) for start in starts)
+gold = sum(score_trailhead(start, True) for start in starts)
+
+print("silver:", silver)
+print("gold:", gold)