summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormhsn <mail@mhsn.net>2025-12-05 09:53:48 +0000
committermhsn <mail@mhsn.net>2025-12-06 07:39:23 +0000
commita91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf (patch)
tree553abebca63c37a2d739bd72b6bf541a6b62afe6
parent34aca76798e8f9f4ac5b2d93619953edebb4c89d (diff)
downloadaoc-a91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf.tar.gz
aoc-a91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf.zip
25-05 python
-rwxr-xr-x2025/05/python.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/2025/05/python.py b/2025/05/python.py
new file mode 100755
index 0000000..9977623
--- /dev/null
+++ b/2025/05/python.py
@@ -0,0 +1,39 @@
+#!/usr/bin/env python3
+
+from itertools import takewhile
+from fileinput import input
+
+
+inp = map(str.strip, input())
+rs = [tuple(map(int, r.split("-"))) for r in takewhile(bool, inp)]
+ids = list(map(int, inp))
+
+
+def add(a: int, b: int, c: int, d: int) -> tuple[int, int] | None:
+ if c < a:
+ return add(c, d, a, b)
+ if b < c:
+ return None
+ return (a, max(b, d))
+
+
+done = False
+while not done:
+ ms = []
+ for r in rs:
+ for idx, m in enumerate(ms):
+ if new := add(*r, *m):
+ ms[idx] = new
+ break
+
+ else:
+ ms.append(r)
+ done = len(rs) == len(ms)
+ rs = ms
+
+
+silver = sum(1 for i in ids if any(lo <= i <= hi for lo, hi in rs))
+gold = sum(b - a + 1 for a, b in rs)
+
+print("silver:", silver)
+print("gold:", gold)