From 2583bc70995c6e016790c2a145138189367ca01d Mon Sep 17 00:00:00 2001 From: Mark Hoekveen Date: Tue, 24 Sep 2024 12:18:55 +0200 Subject: [PATCH] day 7 star 2 --- 7/twostar.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 7/twostar.py diff --git a/7/twostar.py b/7/twostar.py new file mode 100644 index 0000000..567fb4f --- /dev/null +++ b/7/twostar.py @@ -0,0 +1,40 @@ +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 \ No newline at end of file