summaryrefslogtreecommitdiffstats
path: root/day7
diff options
context:
space:
mode:
authorGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-07 17:46:12 +0100
committerGravatar Tom van der Lee <t0m.vd.l33@gmail.com>2022-12-07 17:46:12 +0100
commit890670f34040c8570d30e589cbf82dfef3db6e67 (patch)
tree6241335a765d961c6d656112e9b6ec594ab0ef2e /day7
parent85503e88e1ce76d99d9be40492f77021364e63bd (diff)
download2022-890670f34040c8570d30e589cbf82dfef3db6e67.tar.gz
2022-890670f34040c8570d30e589cbf82dfef3db6e67.tar.bz2
2022-890670f34040c8570d30e589cbf82dfef3db6e67.zip
Simplified code
Diffstat (limited to 'day7')
-rw-r--r--day7/__init__.py32
1 files changed, 14 insertions, 18 deletions
diff --git a/day7/__init__.py b/day7/__init__.py
index 279201a..4adb0ca 100644
--- a/day7/__init__.py
+++ b/day7/__init__.py
@@ -43,7 +43,7 @@ class Folder(Inode):
43 def size(self, value: int): 43 def size(self, value: int):
44 pass 44 pass
45 45
46 def __iter__(self): 46 def __iter__(self) -> Iterator[Inode]:
47 yield self 47 yield self
48 48
49 for inode in self.children.values(): 49 for inode in self.children.values():
@@ -60,15 +60,14 @@ class File(Inode):
60 60
61 61
62@dataclass 62@dataclass
63class FileSystem: 63class FileSystem(Folder):
64 current: Folder = None 64 pwd: Folder = None
65 root: Folder = field(default_factory=lambda: Folder(name="/"))
66 65
67 capacity = 70000000 66 capacity = 70000000
68 67
69 @classmethod 68 @classmethod
70 def from_commands(cls, commands: List[Command]) -> "FileSystem": 69 def from_commands(cls, commands: List[Command]) -> "FileSystem":
71 file_system = cls() 70 file_system = cls(name="/")
72 71
73 for command in commands: 72 for command in commands:
74 file_system.parse_command(command) 73 file_system.parse_command(command)
@@ -76,7 +75,7 @@ class FileSystem:
76 return file_system 75 return file_system
77 76
78 def __post_init__(self): 77 def __post_init__(self):
79 self.current = self.root 78 self.pwd = self
80 79
81 def parse_command(self, command: Command): 80 def parse_command(self, command: Command):
82 match command.action: 81 match command.action:
@@ -90,36 +89,33 @@ class FileSystem:
90 size, name = item.split(" ") 89 size, name = item.split(" ")
91 90
92 inode = ( 91 inode = (
93 Folder(name=name, parent=self.current) 92 Folder(name=name, parent=self.pwd)
94 if size == "dir" 93 if size == "dir"
95 else File(name=name, parent=self.current, size=int(size)) 94 else File(name=name, parent=self.pwd, size=int(size))
96 ) 95 )
97 96
98 if name in self.current.children: 97 if name in self.pwd.children:
99 raise Exception(f"File/Folder already exists {name}") 98 raise Exception(f"File/Folder already exists {name}")
100 99
101 self.current.children[name] = inode 100 self.pwd.children[name] = inode
102 101
103 def change_directory(self, name: str): 102 def change_directory(self, name: str):
104 match name: 103 match name:
105 case "..": 104 case "..":
106 new_dir = self.current.parent 105 new_dir = self.pwd.parent
107 case "/": 106 case "/":
108 new_dir = self.root 107 new_dir = self
109 case name: 108 case name:
110 new_dir = self.current.children.get(name) 109 new_dir = self.pwd.children.get(name)
111 110
112 if new_dir is None or isinstance(new_dir, File): 111 if new_dir is None or isinstance(new_dir, File):
113 raise Exception(f"No such folder {name}") 112 raise Exception(f"No such folder {name}")
114 113
115 self.current = new_dir 114 self.pwd = new_dir
116
117 def __iter__(self):
118 return iter(self.root)
119 115
120 @property 116 @property
121 def free_space(self): 117 def free_space(self):
122 return self.capacity - self.root.size 118 return self.capacity - self.size
123 119
124 120
125class Assignment(BaseAssignment, ABC): 121class Assignment(BaseAssignment, ABC):