--- /dev/null
+"""Pretend we're du"""
+import pprint
+import sys
+
+
+"""
+fs = {
+ "dir /": 0,
+ "/siten": 34987,
+ "/itee": 3478,
+ "/esntien": 38787,
+ "dir /a": 0,
+ "/aiensten": 378,
+ "/a/iensent": 1097,
+ "/a/b/c/d/e/g/fensteinsrteni": 347347,
+ "dir /a/b": 0,
+}
+"""
+
+
+def populate_dir_sizes(fs):
+ for path, size in fs.items():
+ if path.startswith("dir "):
+ parent = path.split(" ")[1]
+ if parent == "/":
+ parent = ""
+
+ for child_path, child_size in fs.items():
+ if child_path.startswith(f"{parent}/"):
+ fs[path] += child_size
+
+ return fs
+
+
+fs = {"dir /": 0}
+current_path = []
+
+with open("7.in") as fh:
+ for line in fh:
+ line = line.strip()
+
+ if line.startswith("$ cd "):
+ if line[5:] == "/":
+ current_path = [""]
+ elif line[5:] == "..":
+ current_path.pop()
+ else:
+ current_path.append(line[5:])
+
+ continue
+
+ if line.startswith("$ ls"):
+ continue
+
+ size, name = line.split(" ")
+ if size == "dir":
+ fs[f"dir {'/'.join(current_path + [name])}"] = 0
+ else:
+ fs["/".join(current_path + [name])] = int(size)
+
+fs = populate_dir_sizes(fs)
+
+
+total_size = 0
+for path, size in fs.items():
+ if path.startswith("dir ") and size <= 100000:
+ total_size += size
+
+
+print(total_size)
+
+
+fs_size = fs["dir /"]
+disk_size = 70000000
+update_size = 30000000
+remaining_disk_space = disk_size - fs_size
+extra_space_required = update_size - remaining_disk_space
+
+candidates_for_deletion = []
+for path, size in fs.items():
+ if path.startswith("dir ") and size >= extra_space_required:
+ candidates_for_deletion.append((path, size))
+
+candidates_for_deletion.sort(key=lambda x: x[1])
+print(candidates_for_deletion[0])