summaryrefslogtreecommitdiff
path: root/2025/05/python.py
blob: 99776239e1d7bed57628b707c59eed73a4137601 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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)