07
This commit is contained in:
@@ -0,0 +1,56 @@
|
|||||||
|
|
||||||
|
with open("input") as file:
|
||||||
|
log = file.read().strip().split('\n')
|
||||||
|
|
||||||
|
|
||||||
|
def make_dir(name, parent):
|
||||||
|
if name.startswith('dir '):
|
||||||
|
name = name[4:]
|
||||||
|
return [name, parent, [], [], 0]
|
||||||
|
|
||||||
|
root = make_dir('/', None)
|
||||||
|
current = root
|
||||||
|
log = iter(log)
|
||||||
|
next(log)
|
||||||
|
line = next(log, None)
|
||||||
|
while line is not None:
|
||||||
|
if line=="$ cd ..":
|
||||||
|
current = current[1]
|
||||||
|
line = next(log, None)
|
||||||
|
continue
|
||||||
|
elif line.startswith("$ cd "):
|
||||||
|
d = line[5:]
|
||||||
|
for dir in current[2]:
|
||||||
|
if dir[0]==d:
|
||||||
|
current = dir
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('did not cd')
|
||||||
|
line = next(log, None)
|
||||||
|
continue
|
||||||
|
elif line=="$ ls":
|
||||||
|
line = next(log, None)
|
||||||
|
while not (line is None or line.startswith("$")):
|
||||||
|
if line.startswith('dir '):
|
||||||
|
current[2].append(make_dir(line, current))
|
||||||
|
else:
|
||||||
|
size, name = line.split()
|
||||||
|
size = int(size)
|
||||||
|
current[3].append((size, name))
|
||||||
|
line = next(log, None)
|
||||||
|
|
||||||
|
def size(tree):
|
||||||
|
files = sum(x[0] for x in tree[3])
|
||||||
|
dirs = sum(size(x) for x in tree[2])
|
||||||
|
tree[4] = files+dirs
|
||||||
|
return files+dirs
|
||||||
|
|
||||||
|
size(root)
|
||||||
|
def all_dirs(tree):
|
||||||
|
yield tree
|
||||||
|
for x in tree[2]:
|
||||||
|
yield from all_dirs(x)
|
||||||
|
print(sum(map(lambda x: x[4], filter(lambda x: x[4]<=100_000, all_dirs(root)))))
|
||||||
|
print(min(map(lambda x: x[4], filter(lambda x: 70_000_000-root[4]+x[4]>=30_000_000, all_dirs(root)))))
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user