[WIP] 2022/day07: #1
|
@ -0,0 +1,97 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from typing import TextIO
|
||||||
|
|
||||||
|
|
||||||
|
def join(cwd: list, upto: int) -> str:
|
||||||
|
path = ""
|
||||||
|
|
||||||
|
for i in range(upto + 1):
|
||||||
|
path = path + "/" + cwd[i]
|
||||||
|
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def part1(t_out: TextIO) -> int:
|
||||||
|
files = {}
|
||||||
|
cwd = ""
|
||||||
|
tot = 0
|
||||||
|
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
while line != "":
|
||||||
|
# parse commands here
|
||||||
|
print(line)
|
||||||
|
print(files)
|
||||||
|
|
||||||
|
if line == "$ cd /":
|
||||||
|
cwd = "/"
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
elif line == "$ cd ..":
|
||||||
|
cwd = "/" + cwd.strip("/")[:-1][:-1]
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
elif line.split()[:2] == ["$", "cd"]:
|
||||||
|
if not cwd == "/":
|
||||||
|
cwd += f"/{line.split()[2]}"
|
||||||
|
else:
|
||||||
|
cwd += f"{line.split()[2]}"
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
print(">", cwd)
|
||||||
|
|
||||||
|
if line == "$ ls":
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
while line != "" and line.split()[0] != "$":
|
||||||
|
lspl = line.split()
|
||||||
|
# print("here", lspl)
|
||||||
|
|
||||||
|
if lspl[0] == "dir": # mkdir
|
||||||
|
if not cwd == "/":
|
||||||
|
files[f"{cwd}/{lspl[1]}"] = 0
|
||||||
|
else:
|
||||||
|
files[f"{cwd}{lspl[1]}"] = 0
|
||||||
|
print(files)
|
||||||
|
else:
|
||||||
|
# print(cwd, len(cwd.split("/")))
|
||||||
|
|
||||||
|
if len(cwd.split("/")) not in (1, 2): # not like /aaa, has multiple
|
||||||
|
recdirs = cwd.split("/")[1:]
|
||||||
|
|
||||||
|
ls = []
|
||||||
|
|
||||||
|
for i in range(len(recdirs)):
|
||||||
|
ls.append(join(recdirs, i))
|
||||||
|
|
||||||
|
print(ls)
|
||||||
|
|
||||||
|
for path in ls:
|
||||||
|
files[path] += int(lspl[0])
|
||||||
|
|
||||||
|
elif (
|
||||||
|
len(cwd.split("/")) == 2 and cwd.split("/")[1] != ""
|
||||||
|
): # only one of /a, not root
|
||||||
|
# print(cwd, "run only /[...]")
|
||||||
|
files[cwd] += int(lspl[0])
|
||||||
|
|
||||||
|
tot += int(lspl[0]) # "/" case here
|
||||||
|
# PARSE HERE!!
|
||||||
|
# file: add to both current folder dict and previous
|
||||||
|
# from thinking in bed: full path as key, add to each in for...
|
||||||
|
line = t_out.readline().strip()
|
||||||
|
|
||||||
|
print(files)
|
||||||
|
print("total", tot)
|
||||||
|
|
||||||
|
sum = 0
|
||||||
|
|
||||||
|
for i in files:
|
||||||
|
if files[i] < 100000:
|
||||||
|
sum += files[i]
|
||||||
|
|
||||||
|
return sum
|
||||||
|
|
||||||
|
|
||||||
|
print(part1(open("day07.txt")))
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue