46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
|
#!/bin/python
|
||
|
|
||
|
# faded blue bags contain 0 other bags.
|
||
|
# dotted black bags contain 0 other bags.
|
||
|
# vibrant plum bags contain 11 other bags: 5 faded blue bags and 6 dotted black bags.
|
||
|
# dark olive bags contain 7 other bags: 3 faded blue bags and 4 dotted black bags.
|
||
|
# shiny gold bags contain 3 other bags: 1 dark olive bag and 2 vibrant plume bags
|
||
|
|
||
|
# 7 + 2*11
|
||
|
|
||
|
def check(bag, rules):
|
||
|
result = 0
|
||
|
for needed_bag, amount in rules[bag].items():
|
||
|
if rules[needed_bag] == {}:
|
||
|
result += amount
|
||
|
else:
|
||
|
result += amount + amount * check(needed_bag, rules)
|
||
|
|
||
|
return result
|
||
|
|
||
|
# $color bags contain {$number $color bags,}*x
|
||
|
|
||
|
# color: {colors}
|
||
|
|
||
|
with open("input", 'r') as input:
|
||
|
rules = {}
|
||
|
for line in input:
|
||
|
line = line.strip()
|
||
|
parts = line.split(" bags contain ")
|
||
|
key = parts[0]
|
||
|
value = {}
|
||
|
|
||
|
parts = parts[1].strip(".").split(", ")
|
||
|
|
||
|
for part in parts:
|
||
|
if part == "no other bags":
|
||
|
break;
|
||
|
bag_parts = part.split(" ", 1)
|
||
|
value[bag_parts[1].replace("bags", "").replace("bag", "").strip()] = int(bag_parts[0])
|
||
|
|
||
|
rules[key] = value
|
||
|
|
||
|
|
||
|
print(check("shiny gold", rules))
|
||
|
|