diff options
| author | mhsn <mail@mhsn.net> | 2025-12-05 09:53:48 +0000 |
|---|---|---|
| committer | mhsn <mail@mhsn.net> | 2025-12-06 07:39:23 +0000 |
| commit | a91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf (patch) | |
| tree | 553abebca63c37a2d739bd72b6bf541a6b62afe6 | |
| parent | 34aca76798e8f9f4ac5b2d93619953edebb4c89d (diff) | |
| download | aoc-a91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf.tar.gz aoc-a91612ebd9b5994f3f3aa8fd54c8e5a54ebe4acf.zip | |
25-05 python
| -rwxr-xr-x | 2025/05/python.py | 39 |
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) |
