structured, added solutions 08,07-2022
This commit is contained in:
parent
27fe77bbe1
commit
ee95020aa2
15 changed files with 1428 additions and 111 deletions
|
|
@ -0,0 +1,99 @@
|
|||
class File:
|
||||
def __init__(self, name: str, fileSize: int):
|
||||
self.name = name
|
||||
self.size = fileSize
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"{self.name} - {self.size}"
|
||||
|
||||
|
||||
class Directory:
|
||||
subdiretories: []
|
||||
files: [File]
|
||||
|
||||
def __init__(self, name: str, parent):
|
||||
self.name = name
|
||||
self.parent = parent
|
||||
self.subdiretories = []
|
||||
self.files = []
|
||||
|
||||
def size(self) -> int:
|
||||
total = 0
|
||||
for sub in self.subdiretories:
|
||||
total += sub.size()
|
||||
|
||||
for file in self.files:
|
||||
total += file.size
|
||||
|
||||
return total
|
||||
|
||||
def addSub(self, other):
|
||||
self.subdiretories.append(other)
|
||||
|
||||
def addFile(self, file: File):
|
||||
self.files.append(file)
|
||||
|
||||
def __str__(self) -> str:
|
||||
rv = f"Dir: {self.name} - {self.size()}\n"
|
||||
for file in self.files:
|
||||
rv += f"\t File: {file}\n"
|
||||
|
||||
for sub in self.subdiretories:
|
||||
rv += f"\t {sub}\n"
|
||||
|
||||
return rv
|
||||
|
||||
|
||||
def checkAllowedDirs(currDir: Directory):
|
||||
for sub in currDir.subdiretories:
|
||||
if sub.size() < 100000:
|
||||
allowedDirs.append(sub)
|
||||
|
||||
checkAllowedDirs(sub)
|
||||
|
||||
|
||||
def checkDeletable(currDir: Directory):
|
||||
for sub in currDir.subdiretories:
|
||||
if sub.size() >= SPACENEEDEDTOBECLREAED:
|
||||
possibleDeletes.append(sub)
|
||||
checkDeletable(sub)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
with open("input.txt", "r") as f:
|
||||
raw = [line.replace("\n", "") for line in f.readlines()]
|
||||
|
||||
currentlyLS = False
|
||||
|
||||
fileSystem = Directory("ROOT", "")
|
||||
currentDir: Directory = fileSystem
|
||||
|
||||
for line in raw:
|
||||
if line.startswith("$"):
|
||||
if "cd" in line:
|
||||
where = line.split(" ")[2]
|
||||
if where == "..":
|
||||
currentDir = currentDir.parent
|
||||
else:
|
||||
createdDir = Directory(where, currentDir)
|
||||
currentDir.addSub(createdDir)
|
||||
currentDir = createdDir
|
||||
else:
|
||||
size, currentName = line.split(" ")
|
||||
if size.isnumeric():
|
||||
currentDir.addFile(File(currentName, int(size)))
|
||||
|
||||
allowedDirs = []
|
||||
checkAllowedDirs(fileSystem)
|
||||
print(f"Solution 1: {sum([allowedDir.size() for allowedDir in allowedDirs])}")
|
||||
|
||||
possibleDeletes = []
|
||||
|
||||
TOTALSPACE = 70000000
|
||||
SPACEREQUIRED = 30000000
|
||||
USEDSPACE = fileSystem.size()
|
||||
SPACENEEDEDTOBECLREAED = SPACEREQUIRED - (TOTALSPACE - USEDSPACE)
|
||||
|
||||
checkDeletable(fileSystem)
|
||||
|
||||
print(f"Solution 2: {min([possibleDelete.size() for possibleDelete in possibleDeletes])}")
|
||||
Loading…
Add table
Add a link
Reference in a new issue