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 |