[py] Solve 2022_07

This commit is contained in:
Joscha 2022-12-07 14:27:54 +01:00
parent dd5cf6019d
commit 378b5e38ae
2 changed files with 45 additions and 1 deletions

View file

@ -8,7 +8,7 @@ from .y2017 import d01, d02, d03, d04, d05, d06, d07, d08, d09
from .y2018 import d01, d02, d03, d04, d05, d06, d07, d08, d09, d10, d11
from .y2020 import d10
from .y2021 import d14
from .y2022 import d01, d02, d03, d04, d05, d06
from .y2022 import d01, d02, d03, d04, d05, d06, d07
DAYS = {
"2015_01": y2015.d01.solve,
@ -49,6 +49,7 @@ DAYS = {
"2022_04": y2022.d04.solve,
"2022_05": y2022.d05.solve,
"2022_06": y2022.d06.solve,
"2022_07": y2022.d07.solve,
}

43
py/aoc/y2022/d07.py Normal file
View file

@ -0,0 +1,43 @@
def at(fs, path):
for segment in path:
fs = fs[segment]
return fs
def calc_size(fs):
if isinstance(fs, dict):
return sum(calc_size(child) for child in fs.values())
return fs
def dict_sizes(fs):
result = []
if isinstance(fs, dict):
result.append(calc_size(fs))
for child in fs.values():
result.extend(dict_sizes(child))
return result
def solve(inputstr):
fs = {}
path = []
for line in inputstr.splitlines():
if line == "$ cd /":
path = []
elif line == "$ cd ..":
path.pop()
elif line[:5] == "$ cd ":
path.append(line[5:])
elif line == "$ ls":
pass
elif line[:4] == "dir ":
at(fs, path)[line[4:]] = {}
else:
size, name = line.split()
at(fs, path)[name] = int(size)
sizes = dict_sizes(fs)
print("Part 1:", sum(size for size in sizes if size <= 100000))
min_size = calc_size(fs) - 40000000
print(f"Part 2:", min(size for size in sizes if size >= min_size))