Files
aoc2020/day07/module.py
2020-12-07 11:48:15 +01:00

86 lines
1.7 KiB
Python

from aoc.input import get_input
import time
import collections
import re
from aoc.partselector import part_one, part_two
def pw(line):
return line.strip().split(' ')
def p1():
inp = get_input(pw)
pwd = dict()
for i in inp:
key = ''.join(i[0:2])
data = []
for n in range (4, len(i), 4):
if i[n] == 'no':
continue
data.append(''.join(i[n+1:n+3]).strip('., '))
pwd[''.join(key)] = data
count = 0
def contains_gold(y):
if 'shinygold' == y:
return True
else:
ret = False
for j in pwd[y]:
ret = ret | contains_gold(j)
return ret
for j in pwd:
ret = False
for t in pwd[j]:
ret |= contains_gold(t)
if ret:
count += 1
print(count)
return count
def p2(r):
inp = get_input(pw)
pwd = dict()
for i in inp:
key = ''.join(i[0:2])
data = []
for n in range (4, len(i), 4):
if i[n] == 'no':
continue
data.append([int(i[n]), ''.join(i[n+1:n+3]).strip('., ')])
pwd[''.join(key)] = data
count = 0
def count_bags(y):
count = 1
for j in pwd[y]:
tmpcount = count_bags(j[1])
count += tmpcount * j[0]
return count
ret = 0
for t in pwd['shinygold']:
ret += count_bags(t[1]) * t[0]
print(ret)
return 0
if part_one():
start = time.time()
result1 = p1()
print(round(time.time() - start, 4), 's')
if part_two():
start = time.time()
p2(0)
print(round(time.time() - start, 4), 's')