You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1004 B
45 lines
1004 B
import string |
|
|
|
import aoclib |
|
|
|
from pathlib import PurePath |
|
|
|
|
|
inp = aoclib.get_input(7, parser=aoclib.parse_lines) |
|
|
|
|
|
class FileSystem: |
|
def __init__(self, shell_log: list[str]): |
|
fs = {"/": {}} |
|
cwd = PurePath() |
|
for line in shell_log: |
|
if line.startswith("$"): |
|
_, cmd = line.split(" ", maxsplit=1) |
|
if cmd.startswith("cd"): |
|
_, to = cmd.split(" ") |
|
if to == "..": |
|
cwd = cwd.parent |
|
else: |
|
cwd /= to |
|
else: # is ls output |
|
if line.startswith("dir"): |
|
_, dirname = line.split(" ") |
|
else: |
|
size, name = line.split(" ") |
|
|
|
|
|
def part1(): |
|
total = 0 |
|
for line in inp: |
|
if line[0] in string.digits: |
|
size, _ = line.split(" ") |
|
total += int(size) |
|
|
|
return 1611443 |
|
|
|
|
|
def part2(): |
|
return 2086088 |
|
|
|
|
|
aoclib.main(part1, part2)
|
|
|