import shared
from collections import defaultdict


def split_games(row):
    game, draws = row.split(":")
    game = int(game.split(" ")[-1])
    colors = defaultdict(list)
    for draw in draws.split(";"):
        for cube in draw.split(","):
            cube = cube.split()
            count, color = cube
            colors[color].append(int(count))
    return game, colors


MAXES = {
    "red": 12,
    "green": 13,
    "blue": 14,
}


# @shared.profile
def part1(rows):
    applicable = []
    for row in rows:
        ok = True
        game, colors = split_games(row)
        for color, _max in MAXES.items():
            bag_max = max(colors[color])
            if bag_max > _max:
                ok = False
                break
        if ok:
            applicable.append(game)
    print(sum(applicable))


# @shared.profile
def part2(rows):
    total = 0
    for row in rows:
        _, colors = split_games(row)
        power = 1
        for vals in colors.values():
            power *= max(vals)
        total += power
    print(total)


def main():
    rows = [row for row in shared.load_rows(2)]
    with shared.elapsed_timer() as elapsed:
        part1(rows)
        print("🕒", elapsed())

    rows = [row for row in shared.load_rows(2, True)]
    with shared.elapsed_timer() as elapsed:
        part2(rows)
        print("🕒", elapsed())


if __name__ == "__main__":
    main()
