advent2022/seven.py

36 lines
649 B
Python
Executable File

#!/usr/bin/env python3
from useful import *
m = defaultdict(lambda: 0)
def dirs(d):
return [d[1:l+1] for l in range(len(d))]
def dirstr(d):
return '/'.join(d)
def plus(d, n):
for x in dirs(d):
m[dirstr(x)] += n
def cd(d):
global cur
if d == '/':
cur = [d,]
elif d == '..':
cur = cur[:-1]
else:
cur += [d,]
cur = []
ls = lines(open(0))
for l in ls:
if re.match(r'\$ cd', l):
cd(l.split()[-1])
else:
for n in numbers(l):
plus(cur, n)
print(sum(x for x in m.values() if x <= 100000))
print(sorted(v for v in m.values() if v >= m[''] - 40000000)[0])