This repository has been archived on 2024-12-22. You can view files and clone it, but cannot push or open issues or pull requests.
aoc2023/d2.py
2023-12-02 11:48:32 -05:00

67 lines
1.5 KiB
Python

import re
GAME1 = """
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
"""
"""
he bag contained only 12 red cubes, 13 green cubes, and 14 blue cubes?
"""
MAX = {
"red": 12,
"green": 13,
"blue": 14,
}
def solve(text):
r = re.compile(r"(\d+) (\w+)")
r2 = re.compile(r"Game (\d+):")
s = 0
for line in text.splitlines():
if line.strip() == "":
continue
id = r2.match(line).groups()[0]
m = r.findall(line)
for n, c in m:
if int(n) > MAX[c]:
break
else:
s += int(id)
return s
def solve2(text):
r = re.compile(r"(\d+) (\w+)")
s = 0
for line in text.splitlines():
max = {
"red": 0,
"green": 0,
"blue": 0,
}
if line.strip() == "":
continue
m = r.findall(line)
for n, c in m:
n = int(n)
if n > max[c]:
max[c] = int(n)
s += (max["red"] * max["green"] * max["blue"])
return s
if __name__ == "__main__":
assert(solve(GAME1) == 8)
assert(solve2(GAME1) == 2286)
# 10:55
with open("i2.txt", 'r') as f:
text = f.read()
print(solve(text))
print(solve2(text))