#!/usr/bin/python3 import fileinput # import re files = {} subdirs = {} size = {} pwd = [] inls = False def docmd(line): global files, subdirs, size, pwd, inls if line == '$ cd /': pwd = [] elif line == '$ cd ..': pwd = pwd[:len(pwd)-1] elif line.startswith('$ cd'): pwd.append(line[5:]) elif line.startswith('$ ls'): inls = True for line in fileinput.input(): line = line.rstrip() if inls: dir = '/' + '/'.join(pwd) if line.startswith('$ '): inls = False docmd(line) continue elif line.startswith('dir '): if dir not in subdirs: subdirs[dir] = [] subdirs[dir].append(line[4:]) else: (s, f) = line.split(' ') if dir not in files: files[dir] = [] files[dir].append(f) size[dir + '/' + f] = int(s) else: docmd(line) dirsize = {} def getsize(dir): if dir.startswith('//'): dir = dir[1:] if dir in dirsize: return dirsize[dir] total = 0 if dir in files: for f in files[dir]: total += size[dir + '/' + f] if dir in subdirs: for d in subdirs[dir]: total += getsize(dir + '/' + d) dirsize[dir] = total return total getsize('/') free = 70000000 - dirsize['/'] need = 30000000 smallest = dirsize['/'] for d in dirsize: if free + dirsize[d] >= need: if dirsize[d] < smallest: smallest = dirsize[d] print(smallest)