36 lines
787 B
Python
36 lines
787 B
Python
from lib import *
|
|
|
|
input = read_input(2022, 7)
|
|
|
|
sizes = {}
|
|
seen = set()
|
|
pwd = ()
|
|
for line in input.splitlines():
|
|
if match := re.match(r"^\$ cd (.+)$", line):
|
|
d = match[1]
|
|
if d == "/":
|
|
pwd = ()
|
|
elif d == "..":
|
|
pwd = pwd[:-1]
|
|
else:
|
|
pwd = (*pwd, d)
|
|
elif match := re.match(r"^(\d+) (.+)$", line):
|
|
s = int(match[1])
|
|
n = match[2]
|
|
|
|
if (pwd, n) in seen:
|
|
continue
|
|
seen.add((pwd, n))
|
|
|
|
d = pwd
|
|
while True:
|
|
sizes[d] = sizes.get(d, 0) + s
|
|
if not d:
|
|
break
|
|
d = d[:-1]
|
|
|
|
|
|
print(sum(s for s in sizes.values() if s <= 100000))
|
|
|
|
free = 70000000 - sizes[()]
|
|
print(min(s for s in sizes.values() if s >= 30000000 - free))
|