dirstack = [] # Stack of directories we are currently at directories = {} # Maps paths to total filesums TOTAL = 70000000 REQUIRED = 30000000 def addsize(size): for (i, dir) in enumerate(dirstack): path = "/".join(dirstack[:i+1]) if not path in directories: directories[path] = 0 directories[path] += size with open("input.txt", "r") as f: for line in f.readlines(): line = line.strip() if line[0] == '$' and line[2] == 'c': folder = line.split("$ cd ")[1] if folder == '..': dirstack.pop() else: dirstack.append(folder) else: indicator = line.split(" ")[0] try: size = int(indicator) addsize(size) except: pass FREE = TOTAL - directories["/"] NEEDED = REQUIRED-FREE print(f"We have {FREE} space, but need {REQUIRED} so we need {NEEDED}") candidates = sorted(directories, key=directories.get) for candidate in candidates: if directories[candidate] > NEEDED: print(directories[candidate]) break