blob: b5599f50ce185226fe2dce8945b065e6a288accb (
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
|
from sys import stdin
from dataclasses import dataclass
from functools import reduce
from typing import TypeAlias
from operator import mul
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()
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
|