2022/day07: WIP
ci/woodpecker/pr/woodpecker Pipeline was successful
Details
ci/woodpecker/pr/woodpecker Pipeline was successful
Details
parent
c396a02d4b
commit
6b0dfeb78c
|
@ -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