oh dear, what a bodge, day 7
This commit is contained in:
parent
1dbc695af4
commit
4c5cec32f4
1 changed files with 73 additions and 0 deletions
73
07/07.py
Normal file
73
07/07.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import re
|
||||||
|
|
||||||
|
def find_bags(bags, target):
|
||||||
|
seen = []
|
||||||
|
queue = []
|
||||||
|
ret = {}
|
||||||
|
queue.append(target)
|
||||||
|
seen.append(target)
|
||||||
|
|
||||||
|
while len(queue) > 0:
|
||||||
|
current = queue.pop()
|
||||||
|
if current in bags:
|
||||||
|
items = bags[current]
|
||||||
|
for item in items:
|
||||||
|
if item not in seen:
|
||||||
|
count = int(items[item])
|
||||||
|
ret[item] = count
|
||||||
|
queue.append(item)
|
||||||
|
seen.append(current)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
def find_bags2(bags, target):
|
||||||
|
count = 1
|
||||||
|
|
||||||
|
if target not in bags:
|
||||||
|
return 1
|
||||||
|
|
||||||
|
for item in bags[target]:
|
||||||
|
v = find_bags2(bags, item)
|
||||||
|
count = count + (v * int(bags[target][item]))
|
||||||
|
|
||||||
|
return count
|
||||||
|
|
||||||
|
|
||||||
|
bags = {}
|
||||||
|
bags2 = {}
|
||||||
|
for line in sys.stdin:
|
||||||
|
line = line.replace(' bags','')
|
||||||
|
line = line.replace(' bag','')
|
||||||
|
line = line.replace('.','')
|
||||||
|
cont = line.rstrip().split(' contain ')
|
||||||
|
outer = cont[0]
|
||||||
|
inner = cont[1].split(', ')
|
||||||
|
for bag in inner:
|
||||||
|
m = re.match(r'^(\d+) (.*)$', bag)
|
||||||
|
count = 0
|
||||||
|
if m is not None:
|
||||||
|
bag = m.group(2)
|
||||||
|
count = m.group(1)
|
||||||
|
if bag in bags:
|
||||||
|
bags[bag][outer] = count
|
||||||
|
else:
|
||||||
|
t = {}
|
||||||
|
t[outer] = count
|
||||||
|
bags[bag] = t
|
||||||
|
|
||||||
|
if bag == "no other":
|
||||||
|
continue
|
||||||
|
if outer in bags2:
|
||||||
|
bags2[outer][bag] = count
|
||||||
|
else:
|
||||||
|
t = {}
|
||||||
|
t[bag] = count
|
||||||
|
bags2[outer] = t
|
||||||
|
|
||||||
|
valid1 = find_bags(bags, 'shiny gold')
|
||||||
|
print(1, len(valid1))
|
||||||
|
|
||||||
|
print(2, find_bags2(bags2, 'shiny gold')-1)
|
Loading…
Add table
Add a link
Reference in a new issue