advent-of-code-2023/day2/part2.py

63 lines
1.4 KiB
Python
Raw Normal View History

2023-12-03 15:34:59 +00:00
import re
class Game:
def __init__(self, id, r=0, b=0, g=0):
self.id = id
self.red = r
self.blue = b
self.green = g
def __str__(self):
return f'game: {self.id}, max_red={self.red}, max_blue={self.blue}, max_green={self.green}'
game_pattern = re.compile(r'Game ([0-9]+):\s(.*)')
play_pattern = re.compile(r'([0-9]+)\s(red|green|blue)')
total_red = 12
total_blue = 14
total_green = 13
def parse_game(line):
m = game_pattern.search(line)
plays = m.groups()[1].split('; ')
game = Game(int(m.groups()[0]))
for play in plays:
counts = play.split(', ')
for c in counts:
r = b = g = 0
pm = play_pattern.search(c)
if pm.groups()[1] == 'red':
r = int(pm.groups()[0])
if pm.groups()[1] == 'blue':
b = int(pm.groups()[0])
if pm.groups()[1] == 'green':
g = int(pm.groups()[0])
game.red = max(game.red, r)
game.blue = max(game.blue, b)
game.green = max(game.green, g)
return game
def main():
games = []
with open('input', 'r') as f:
while True:
line = f.readline()
if not line:
break
games.append(parse_game(line))
sum = 0
for g in games:
power = g.red * g.blue * g.green
sum += power
print(sum)
if __name__ == '__main__':
main()