advent2023/two.py

32 lines
769 B
Python
Executable File

#!/usr/bin/env python3
from useful import *
ls = lines(open(0))
# {'1': [{'red': 2, ...}, ...]}
def balls_from_grab(g):
return {nn[1]: int(nn[0]) for nn in [b.split() for b in g.split(', ')]}
def round(l):
_, right = l.split(': ')
grabs = right.split('; ')
return [balls_from_grab(g) for g in grabs]
rounds = {i+1: round(s) for i, s in enumerate(ls)}
def win_condition(g):
return (g.get('red', 0) <= 12 and
g.get('green', 0) <= 13 and
g.get('blue', 0) <= 14)
def power(r):
return reduce(int.__mul__,
[max(g.get(c, 0) for g in r) for c in ('red', 'green', 'blue')])
print(sum(
k for k, v in rounds.items() if all(win_condition(g) for g in v)))
print(sum(
power(v) for k, v in rounds.items()))