from advent import elf

# TIL: easy one, but just keeping it straightforward
def main():
    test_lines = elf.read_lines(__file__, test=True)
    lines = elf.read_lines(__file__)
    print("Part 1 (test):")
    print(part1(test_lines))
    print("Part 1:")
    print(part1(lines))
    print("Part 2 (test):")
    print(part2(test_lines))
    print("Part 2:")
    print(part2(lines))


def score(line):
    bag = {
        "red": 12,
        "green": 13,
        "blue": 14
    }
    pre, suf = line.split(":")
    game_id = int(pre.split(" ")[1])

    for game_str in suf.split(";"):
        # "3 blue, 4 red;"...
        for reveal in (r.strip() for r in game_str.split(",")):
            num, color = reveal.split(" ")
            if int(num) > bag[color]:
                return 0
    return int(game_id)


def part1(lines):
    return sum(score(line) for line in lines)


def power_score(line):
    pre, suf = line.split(":")
    # game_id = int(pre.split(" ")[1])
    mins = {
        "red": 0,
        "green": 0,
        "blue": 0
    }
    for game_str in suf.split(";"):
        # "3 blue, 4 red;"...
        for reveal in (r.strip() for r in game_str.split(",")):
            num_str, color = reveal.split(" ")
            num = int(num_str)
            if num > mins[color]:
                mins[color] = num
    return elf.product(mins.values())


def part2(lines):
    return sum(power_score(line) for line in lines)


if __name__ == '__main__':
    main()