import std/[algorithm, sequtils, strutils, tables] var pwd: seq[string] var sizes: Table[string, int] for line in lines(stdin): if line[0] == '$': let cmd = line[2..^1] if cmd.startswith("cd"): if cmd[3..^1] == "..": discard pwd.pop() else: pwd.add(cmd[3..^1]) continue if line.startswith("dir"): continue let size = line.split(' ')[0].parseInt() for i in countdown(pwd.high, 0): let path = pwd[0..i].join("/") if path in sizes: sizes[path] += size else: sizes[path] = size var part1 = 0 for path, size in sizes.pairs(): if size <= 100_000: part1 += size echo part1 let usedSpace = sizes["/"] let toFree = 30_000_000 - (70_000_000 - usedSpace) for size in sizes.values().toSeq().sorted(): if size >= toFree: echo size break