-
Notifications
You must be signed in to change notification settings - Fork 0
/
day07_part1_directory_sizes.py
76 lines (62 loc) · 2.32 KB
/
day07_part1_directory_sizes.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class DirectoryRepository():
def __init__(self) -> None:
self.directories = []
def add_directory(self, directory):
self.directories.append(directory)
class Directory():
def __init__(self, name, parent=None) -> None:
self.name = name
self.parent = parent
self.subdirectories = []
self.file_sizes = 0
def add_file_size(self, file_size):
self.file_sizes += file_size
def add_subdirectory(self, directory):
self.subdirectories.append(directory)
def get_size(self):
subdirectory_sizes = 0
for subdirectory in self.subdirectories:
subdirectory_sizes += subdirectory.get_size()
return self.file_sizes + subdirectory_sizes
def main():
directory_repository = DirectoryRepository()
with open('data/day07_commands.data') as f:
row = next(f)
current_directory = Directory('/')
directory_repository.add_directory(current_directory)
for row in f:
if row.startswith('$ ls'):
continue
elif row.startswith('dir'):
continue
elif row.startswith('$ cd ..'):
current_directory = current_directory.parent
elif row.startswith('$ cd'):
directory_name = row[5:-1]
directory = Directory(directory_name, current_directory)
directory_repository.add_directory(directory)
current_directory.add_subdirectory(directory)
current_directory = directory
else:
file_size = int(row.split(' ')[0])
current_directory.add_file_size(file_size)
pass
SIZE_LIMIT = 100000
directories_below_limit = []
for directory in directory_repository.directories:
if directory.get_size() >= SIZE_LIMIT:
continue
directories_below_limit.append(directory)
sum_of_sizes = 0
for directory in directories_below_limit:
sum_of_sizes += directory.get_size()
# with open('day07_directories', 'w') as f:
# for directory in directory_repository.directories:
# f.write(f'{directory.name} - {directory.get_size()}\n')
print(f"answer: {sum_of_sizes}")
if __name__ == "__main__":
main()
# 1265003 too low
# 1667443
# problem pwcvj
# pwcvj - 292769