| import re | |||||
| from helpers import DEBUG, debug, load_input | |||||
| def split_line(line, character): | |||||
| return [group.strip() for group in line.split(character)] | |||||
| def main(red_max, blue_max, green_max): | |||||
| lines = load_input(day=2) | |||||
| games = [] | |||||
| for line in lines: | |||||
| first_split = split_line(line, ":") | |||||
| game_num = int(re.match(r"Game (\d+)", first_split[0])[1]) | |||||
| line_dict = { | |||||
| "game": game_num, | |||||
| "red": 0, | |||||
| "green": 0, | |||||
| "blue": 0 | |||||
| } | |||||
| second_split = split_line(first_split[1], ";") | |||||
| for group in second_split: | |||||
| third_split = split_line(group, ",") | |||||
| for subgroup in third_split: | |||||
| matches = re.match(r"(\d+) ([a-z]+)", subgroup) | |||||
| color = matches[2] | |||||
| number = int(matches[1]) | |||||
| if number > line_dict[color]: | |||||
| line_dict[color] = number | |||||
| games.append(line_dict) | |||||
| matching_games = 0 | |||||
| for game in games: | |||||
| if game["red"] <= red_max and game["green"] <= green_max and game["blue"] <= blue_max: | |||||
| matching_games += game["game"] | |||||
| print(matching_games) | |||||
| if __name__ == "__main__": | |||||
| main(red_max=12, blue_max=14, green_max=13) |
| import re | |||||
| from helpers import DEBUG, debug, load_input | |||||
| def split_line(line, character): | |||||
| return [group.strip() for group in line.split(character)] | |||||
| def main(red_max, blue_max, green_max): | |||||
| lines = load_input(day=2) | |||||
| games = [] | |||||
| for line in lines: | |||||
| first_split = split_line(line, ":") | |||||
| game_num = int(re.match(r"Game (\d+)", first_split[0])[1]) | |||||
| line_dict = { | |||||
| "game": game_num, | |||||
| "red": 0, | |||||
| "green": 0, | |||||
| "blue": 0 | |||||
| } | |||||
| second_split = split_line(first_split[1], ";") | |||||
| for group in second_split: | |||||
| third_split = split_line(group, ",") | |||||
| for subgroup in third_split: | |||||
| matches = re.match(r"(\d+) ([a-z]+)", subgroup) | |||||
| color = matches[2] | |||||
| number = int(matches[1]) | |||||
| if number > line_dict[color]: | |||||
| line_dict[color] = number | |||||
| games.append(line_dict) | |||||
| games_power = 0 | |||||
| for game in games: | |||||
| games_power += (game["red"] * game["blue"] * game["green"]) | |||||
| print(games_power) | |||||
| if __name__ == "__main__": | |||||
| main(red_max=12, blue_max=14, green_max=13) |
| DEBUG = False | |||||
| def debug(message, *args, **kwargs): | |||||
| global DEBUG | |||||
| if DEBUG: | |||||
| print(message, *args, **kwargs) | |||||
| def load_input(day): | |||||
| day = str(day) if day >= 10 else f"0{day}" | |||||
| filename = f"day{day}.input" | |||||
| with open(filename, "r") as file: | |||||
| input_list = [line.strip() for line in file.readlines()] | |||||
| return input_list |