Compare commits
2 Commits
1c4ffaaf49
...
d621db89ad
| Author | SHA1 | Date | |
|---|---|---|---|
| d621db89ad | |||
| b5172e0f22 |
101
07/g.py
Normal file
101
07/g.py
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
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)
|
||||||
|
|
||||||
|
usedspace = dirs['/'].size()
|
||||||
|
freespace = 70000000 - usedspace
|
||||||
|
candidates = []
|
||||||
|
|
||||||
|
for i in dirs.values():
|
||||||
|
dirsize = i.size()
|
||||||
|
if (freespace + dirsize) > 30000000:
|
||||||
|
candidates.append(dirsize)
|
||||||
|
|
||||||
|
candidates.sort()
|
||||||
|
print(candidates[0])
|
||||||
Reference in New Issue
Block a user