summaryrefslogtreecommitdiffstats
path: root/2.py
blob: d9c443370f0ca8e2786e45b0be1712b54728613b (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
# pyright: strict
from dataclasses import dataclass
from functools import reduce
from operator import mul
from sys import stdin
from typing import TypeAlias

CubeSet: TypeAlias = dict[str, int]


@dataclass
class Game:
    id: int
    subsets: list[CubeSet]


def parse(inp: str) -> Game:
    game, subsets_str = inp.rstrip().split(": ")
    _, game = game.split(" ")
    subsets: list[dict[str, int]] = list()
    for s in subsets_str.split("; "):
        cubes = [c.split(" ") for c in s.split(", ")]
        subsets.append({c[1]: int(c[0]) for c in cubes})
    return Game(int(game), subsets)


games = [parse(l) for l in stdin]
limits = {"red": 12, "green": 13, "blue": 14}

# fmt: off
print(sum(g.id for g in games if all(s[k] <= limits[k] for s in g.subsets for k in limits.keys() if k in s)))
print(sum(reduce(mul, (max(s[k] for s in g.subsets if k in s) for k in limits.keys())) for g in games))
# fmt: on