def parse_game_data(line): """ Parses a line of game data to extract the game ID and the counts of each color. Args: line (str): A line of game data. Returns: int, dict: Game ID and a dictionary with color counts. """ parts = line.split(': ') game_id = int(parts[0].split(' ')[1]) color_counts = {'red': 0, 'green': 0, 'blue': 0} subsets = parts[1].split('; ') for subset in subsets: colors = subset.split(', ') for color in colors: count, color_name = color.split(' ') color_name = color_name.strip() # Remove any trailing whitespace or newline characters color_counts[color_name] = max(color_counts[color_name], int(count)) return game_id, color_counts def calculate_power_of_set(game_data): """ Calculates the power of the cube set. Args: game_data (dict): The minimum number of cubes of each color. Returns: int: The power of the cube set. """ return game_data['red'] * game_data['green'] * game_data['blue'] def process_games(file_path): """ Processes the games from a file and finds the sum of the power of the minimum sets. Args: file_path (str): Path to the file containing game data. Returns: int: Sum of the power of the minimum cube sets. """ with open(file_path, 'r') as file: lines = file.readlines() sum_of_powers = 0 for line in lines: _, game_data = parse_game_data(line) power = calculate_power_of_set(game_data) sum_of_powers += power return sum_of_powers def test(): print("start testing") sum_of_powers = process_games('../test.txt') # Assertion for testing assert sum_of_powers == 2286, f"Expected sum of powers to be 2286, but got {sum_of_powers}" print(f"Test Passed: Sum of powers for the minimum cube sets is {sum_of_powers}\n") # Run the test test() # Process the actual input file sum_of_powers = process_games('../input.txt') print(f"From input.txt: Sum of powers for the minimum cube sets is {sum_of_powers}")