diff --git a/7/nospaceleft.py b/7/nospaceleft.py index 2b75ca6..1585711 100644 --- a/7/nospaceleft.py +++ b/7/nospaceleft.py @@ -3,14 +3,25 @@ from collections import defaultdict from aocd.models import Puzzle from aocd import submit - -def get_sizes(dirs: dict, max_size: int) -> int: +def get_sizes_a(dirs: dict, max_size: int) -> int: """ - gather all filesizes from the input + return the size of all dirs which are at most max_size big """ filtered_dirs = [ value for value in dirs.values() if value < max_size] return sum(filtered_dirs) +def get_sizes_b(dirs: dict, needed_size: int) -> int: + """ + return the smallest size of a dir which when deleted amounts + to the needed size of 30M. + """ + total_size = 70000000 + used_size = dirs[('/',)] + max_free = needed_size - (total_size - used_size) + filtered_dirs = [ value for value in dirs.values() if value > max_free] + return min(filtered_dirs) + + def parse_input(input_str: str) -> list: """ the input string consists of the following four message types @@ -48,11 +59,11 @@ if __name__ == "__main__": dirs = parse_input(puzzle.input_data) # part a: get the sum of all dirs where the size is at most 100k - answer_a = get_sizes(dirs, 100000) + answer_a = get_sizes_a(dirs, 100000) print(f"{answer_a}") submit(answer_a, part="a", day=7, year=2022) - # part b: - answer_b = get_sizes(dirs, 100) + # part b: find the smallest D (huehue) that will free up at least 30M + answer_b = get_sizes_b(dirs, 30000000) print(f"{answer_b}") - #submit(answer_b, part="b", day=7, year=2022) + submit(answer_b, part="b", day=7, year=2022)