1
0
aoc-2020/7/part1.py
2020-12-10 15:09:10 +02:00

32 lines
790 B
Python

import re
rawRules = ""
with open("input.txt", "r") as f:
rawRules = f.read()
rules = {}
for rawRule in rawRules.split("\n"):
bags = re.findall(r"(\d+)? ?(\w+ \w+) bag", rawRule)
targetColor = bags[0][1]
rules[targetColor] = {}
if (bags[1][1] != "no other"):
for bag in bags[1:]:
rules[targetColor][bag[1]] = int(bag[0])
shinyGoldMemo = {}
def doesContainShinyGold(color):
if shinyGoldMemo.get(color) == None:
for nestedColor in rules[color].keys():
if nestedColor == "shiny gold" or doesContainShinyGold(nestedColor):
shinyGoldMemo[color] = True
break
if shinyGoldMemo.get(color) == None:
shinyGoldMemo[color] = False
return shinyGoldMemo[color]
# Populate memo
for color in rules.keys():
doesContainShinyGold(color)
print(sum(shinyGoldMemo.values()))