You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

61 lines
1.3 KiB

import re
# find colours and the colours it can contain
def parse(l):
group = re.compile(r"(?P<colour>.*?) bags contain").search(l)
group2 = re.compile(r"(?P<number>\d+) (?P<colour>.*?) bag").findall(l)
return group.group(1), group2
# count what a bag of given colour can contain
def containments(colour):
if colour not in dic:
memo[colour] = 0
if colour in memo:
return memo[colour]
total = 0
for (x, y) in dic[colour]:
total += int(x) * containments(y)
memo[colour] = total
return total
# count number of bags, that can be contained
def number_bags(colour):
if colour not in dic:
memo2[colour] = 0
if colour in memo2:
return memo2[colour]
total = 0
for (x,y) in dic[colour]:
total += int(x) + int(x) * number_bags(y)
memo2[colour] = total
return total
with open(r"C:\Users\Maya\Desktop\Uni\WS_2021\AoC\input07") as f:
lines = f.readlines()
# make dictionary with the values
dic = {}
for line in lines:
key, value = parse(line)
dic[key] = value
# for challenge 1
memo = {"shiny gold": 1}
count = 0
for key in dic.keys():
if containments(key) > 0:
count += 1
print(count-1)
# print for challenge 2
memo2 = {}
print(number_bags("shiny gold"))