parent
a15dcf85cf
commit
f707aa0220
@ -0,0 +1,26 @@ |
|||||||
|
import re |
||||||
|
import argparse |
||||||
|
|
||||||
|
parser = argparse.ArgumentParser() |
||||||
|
parser.add_argument("filename", help="the file from which to take data") |
||||||
|
args = parser.parse_args() |
||||||
|
|
||||||
|
with open(args.filename, "r") as f: contents = f.read() |
||||||
|
|
||||||
|
buffer = contents[:4] |
||||||
|
for (i, s) in enumerate(contents[3:]): |
||||||
|
buffer = buffer[1:] + s |
||||||
|
|
||||||
|
print(buffer) |
||||||
|
if len(set(buffer)) == 4: |
||||||
|
print(i+4) |
||||||
|
break |
||||||
|
|
||||||
|
buffer = contents[:14] |
||||||
|
for (i, s) in enumerate(contents[13:]): |
||||||
|
buffer = buffer[1:] + s |
||||||
|
|
||||||
|
print(buffer) |
||||||
|
if len(set(buffer)) == 14: |
||||||
|
print(i+14) |
||||||
|
break |
@ -0,0 +1,81 @@ |
|||||||
|
import re |
||||||
|
import argparse |
||||||
|
|
||||||
|
parser = argparse.ArgumentParser() |
||||||
|
parser.add_argument("filename", help="the file from which to take data") |
||||||
|
args = parser.parse_args() |
||||||
|
|
||||||
|
with open(args.filename, "r") as f: contents = f.read() |
||||||
|
|
||||||
|
root = {"/": {}} |
||||||
|
pwd = ["/"] |
||||||
|
|
||||||
|
for command in contents.split("$"): |
||||||
|
command = command.strip() |
||||||
|
current_directory = root |
||||||
|
for directory in pwd: |
||||||
|
current_directory = current_directory[directory] |
||||||
|
|
||||||
|
if command.startswith("cd"): |
||||||
|
if "cd /" in command: |
||||||
|
pwd = ["/"] |
||||||
|
elif ".." in command: |
||||||
|
pwd.pop() |
||||||
|
else: |
||||||
|
pwd.append(command.split()[1]) |
||||||
|
print("moved. now our location is {}", pwd) |
||||||
|
if command.startswith("ls"): |
||||||
|
for line in command.split("\n"): |
||||||
|
if line == "ls": |
||||||
|
continue |
||||||
|
else: |
||||||
|
line = line.split() |
||||||
|
if line[0] == "dir": |
||||||
|
if line[1] not in current_directory: |
||||||
|
current_directory[line[1]] = {} |
||||||
|
else: |
||||||
|
current_directory[line[1]] = int(line[0]) |
||||||
|
# add to the directory listing |
||||||
|
pass |
||||||
|
print("a command: {}".format(command)) |
||||||
|
|
||||||
|
def size_of_listing(path): |
||||||
|
it = root |
||||||
|
for i in path: it = it[i] |
||||||
|
if isinstance(it, dict): |
||||||
|
s = 0 |
||||||
|
for k, v in it.items(): |
||||||
|
s += size_of_listing(path + [k]) |
||||||
|
return s |
||||||
|
return it |
||||||
|
|
||||||
|
def all_of_it(path, d): |
||||||
|
for k, v in d.items(): |
||||||
|
if isinstance(v, dict): |
||||||
|
yield from all_of_it(path + [k], v) |
||||||
|
yield path + [k], size_of_listing(path + [k]) |
||||||
|
|
||||||
|
total_space = 70000000 |
||||||
|
total_needed = 30000000 |
||||||
|
space_used = size_of_listing(["/"]) |
||||||
|
free_space = total_space-space_used |
||||||
|
required = total_needed - free_space |
||||||
|
|
||||||
|
s=0 |
||||||
|
for path, size in sorted(list(all_of_it(["/"], root["/"])), key=lambda x: x[1]): |
||||||
|
print("{} with size {}".format(path, size)) |
||||||
|
if size < 100000: |
||||||
|
s += size |
||||||
|
print("total less than 100,000 is {}".format(s)) |
||||||
|
for path, size in filter( |
||||||
|
lambda x: x[1] > required, |
||||||
|
sorted( |
||||||
|
list( |
||||||
|
all_of_it(["/"], root["/"]) |
||||||
|
), |
||||||
|
key=lambda x: x[1] |
||||||
|
) |
||||||
|
): |
||||||
|
print("{} with size {}".format(path, size)) |
||||||
|
|
||||||
|
|
Loading…
Reference in new issue