-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path07-02.py
58 lines (53 loc) · 1.62 KB
/
07-02.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
from bisect import bisect_left
directories = {}
currentDir = []
currentMaps = [directories]
isLs = False
while True:
inputval = input()
if inputval == "":
break
if isLs and inputval[0] == '$':
isLs = False
if not isLs:
inputvals = inputval.split()
if inputvals[1] == 'cd':
if inputvals[2] == '..':
currentDir.pop()
currentMaps.pop()
elif inputvals[2] == '/':
currentDir.clear()
currentMaps.clear()
currentMaps.append(directories)
else:
currentDir.append(inputvals[2])
if inputvals[2] not in currentMaps[-1]:
currentMaps[-1][inputvals[2]] = {}
currentMaps.append(currentMaps[-1][inputvals[2]])
else:
isLs = True
else:
inputvals = inputval.split()
if inputvals[0] == "dir":
# Is a directory
if inputvals[1] not in currentMaps[-1]:
currentMaps[-1][inputvals[1]] = {}
else:
filesize = int(inputvals[0])
currentMaps[-1][inputvals[1]] = filesize
directorySizes = []
def getDirectorySize(dir):
size = 0
for index in dir:
if type(dir[index]) is dict:
size += getDirectorySize(dir[index])
else:
size += dir[index]
directorySizes.append(size)
return size
rootSize = getDirectorySize(directories)
freeSpace = 70000000 - rootSize
spaceRequired = 30000000 - freeSpace
directorySizes.sort()
idx = bisect_left(directorySizes, spaceRequired)
print(directorySizes[idx])