#!python3 import re import argparse parser = argparse.ArgumentParser() parser.add_argument("filename", help="the file from which to take the list of games") parser.add_argument("red_max", help="how many reds are available", type=int) parser.add_argument("green_max", help="how many greens are available", type=int) parser.add_argument("blue_max", help="how many blues are available", type=int) args = parser.parse_args() line_re = re.compile("Game (\d+):(.*)") red_re = re.compile(".*?(\d+) red.*") green_re = re.compile(".*?(\d+) green.*") blue_re = re.compile(".*?(\d+) blue.*") def game_from_line(string): m = line_re.match(string) game_number = int(m.group(1)) game_strings = m.group(2).split(";") games = [] for g in game_strings: reds = red_re.match(g) reds = int(reds.group(1)) if reds else 0 greens = green_re.match(g) greens = int(greens.group(1)) if greens else 0 blues = blue_re.match(g) blues = int(blues.group(1)) if blues else 0 games.append((reds, greens, blues)) return (game_number, games) all_games = [] with open(args.filename, "r") as f: for l in f.readlines(): all_games.append(game_from_line(l)) for l in all_games: print(l) answer = 0 for l in all_games: answer += l[0] for (r, g, b) in l[1]: if r > args.red_max or g > args.green_max or b > args.blue_max: answer -= l[0] break print(answer)