From 015d98ddddd200b2ff28a8d6fb0f06cf282c050e Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Sat, 2 Dec 2023 11:09:42 +0000 Subject: day 2 --- 2.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 2.py diff --git a/2.py b/2.py new file mode 100644 index 0000000..778208e --- /dev/null +++ b/2.py @@ -0,0 +1,32 @@ +from sys import stdin +from dataclasses import dataclass +from functools import reduce +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() + 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(int.__mul__, (max(s[k] for s in g.subsets if k in s) for k in limits.keys())) for g in games)) +# fmt: on -- cgit v1.2.3-54-g00ecf