day 7 first answer
This commit is contained in:
90
07/g.py
Normal file
90
07/g.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user