diff --git a/07/g.py b/07/g.py new file mode 100644 index 0000000..bd5eb62 --- /dev/null +++ b/07/g.py @@ -0,0 +1,90 @@ +import os + +input = open(os.path.dirname(__file__) + + "/input.txt", "r").readlines() + + +class Directory(object): + def __init__(self, name: str, parent): + self.name = name + self.files = {} + self.dirs = {} + self.parent = parent + + def add_file(self, name: str, size: int): + self.files[name] = size + + def add_directory(self, name, dir): + self.dirs[name] = dir + + def get_directory(self, dir: str): + return self.dirs[dir] + + def get_parent(self): + return self.parent + + def size(self): + tot = 0 + for i in self.files.values(): + tot += int(i) + for d in self.dirs.values(): + tot += int(d.size()) + return tot + + def directories(self): + return self.dirs.values() + + def pwd(self): + str = '' + if self.parent != None: + str = self.parent.pwd() + '/' + self.name + return str + + def __str__(self): + return self.pwd() + " " + str(self.size()) + + +class Dictlist(dict): + def __setitem__(self, key, value): + try: + self[key] + except KeyError: + super(Dictlist, self).__setitem__(key, []) + self[key].append(value) + + +dirs = {'/': Directory('/', None)} + + +def parseLine(line: str): + return line + + +curdir = dirs['/'] + +for l in input: + cmd = l.strip().split(' ') + + if cmd[1] == "cd": + if cmd[2] == '..': + curdir = curdir.get_parent() + elif cmd[2] != '/': + curdir = curdir.get_directory(cmd[2]) + + if (cmd[0] == 'dir'): + dirs[curdir.pwd()+cmd[1]] = Directory(cmd[1], curdir) + curdir.add_directory(cmd[1], dirs[curdir.pwd()+cmd[1]]) + + if str(cmd[0]).isnumeric(): + curdir.add_file(cmd[1], cmd[0]) + + +tot = 0 + +for i in dirs.values(): + dirsize = i.size() + if dirsize <= 100000: + tot += dirsize + + +print(tot)