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.
42 lines
704 B
42 lines
704 B
4 years ago
|
#!/usr/bin/env python3
|
||
|
|
||
|
from sys import argv
|
||
|
|
||
|
i = [x.strip() for x in open(argv[1])]
|
||
|
|
||
|
b = {}
|
||
|
r = {}
|
||
|
for l in i:
|
||
|
c, l = l.split(" bags contain ")
|
||
|
if c not in b:
|
||
|
b[c] = {}
|
||
|
if l.startswith("no other bags"):
|
||
|
continue
|
||
|
l = l.split(", ")
|
||
|
for i in l:
|
||
|
i = i.split(" ")
|
||
|
n = int(i[0])
|
||
|
cc = " ".join(i[1:3])
|
||
|
b[c][cc] = n
|
||
|
if cc not in r:
|
||
|
r[cc] = set()
|
||
|
r[cc].add(c)
|
||
|
|
||
|
o = set()
|
||
|
def add(x):
|
||
|
global o
|
||
|
o.add(x)
|
||
|
if x in r:
|
||
|
for c in r[x]:
|
||
|
add(c)
|
||
|
add("shiny gold")
|
||
|
print(len(o)-1)
|
||
|
|
||
|
def add(x):
|
||
|
o = 1
|
||
|
for c in b[x]:
|
||
|
o += add(c)*b[x][c]
|
||
|
return o
|
||
|
o = add("shiny gold")
|
||
|
print(o-1)
|