Solve 7.1 and 7.2
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
|
||||
with open("input") as f:
|
||||
data = f.read().strip().split("\n")
|
||||
|
||||
# light beige bags contain 5 dark green bags, 5 light gray bags, 3 faded indigo bags, 2 vibrant aqua bags.
|
||||
def f(bag):
|
||||
count, *color = bag.split(' ')[:-1]
|
||||
color = ' '.join(color)
|
||||
return count, color
|
||||
|
||||
rules = {}
|
||||
for rule in data:
|
||||
bag, value = rule.split(" bags contain ")
|
||||
if value=="no other bags.":
|
||||
values = {}
|
||||
else:
|
||||
values = value[:-1].split(", ")
|
||||
values = {color: int(count) for count, color in map(f, values)}
|
||||
rules[bag] = values
|
||||
|
||||
from functools import cache
|
||||
@cache
|
||||
def shiny_gold(bag):
|
||||
global count
|
||||
if "shiny gold" in rules[bag]:
|
||||
return True
|
||||
if any(shiny_gold(inner) for inner in rules[bag].keys()):
|
||||
return True
|
||||
return False
|
||||
|
||||
print(len({bag for bag in rules if shiny_gold(bag)}))
|
||||
|
||||
def inside(bag):
|
||||
if not rules[bag]:
|
||||
return 1
|
||||
return 1+sum(count*inside(inner) for inner, count in rules[bag].items())
|
||||
print(inside("shiny gold")-1)
|
||||
Reference in New Issue
Block a user