from math import prod lines = open('inputs/day2.txt').readlines() red_max = 12 green_max = 13 blue_max = 14 def cubes(lines: list) -> list[int]: max_cubes = [] for line in lines: line = line.strip('\n').split(":") rounds = line[1].split(";") reds = [0] greens = [0] blues = [0] for round in rounds: cubes = round.split(",") for cube in cubes: cube = cube.split(" ") _, nr, clr = cube if clr == "red": reds.append(int(nr)) elif clr == "green": greens.append(int(nr)) else: blues.append(int(nr)) max_cubes.append([max(reds), max(greens), max(blues)]) return max_cubes def possible_games(games: list[int]) -> list[int]: valid_game_nrs = [] for idx, game in enumerate(games): possible = True if game[0] > red_max: possible = False if game[1] > green_max: possible = False if game[2] > blue_max: possible = False if possible: valid_game_nrs.append(idx+1) return valid_game_nrs def cube_power(games: list[int]) -> list[int]: return [prod(x) for x in games] print(f"Solution Part 1: {sum(possible_games(cubes(lines)))}") print(f"Solution Part 2: {sum(cube_power(cubes(lines)))}")