diff --git a/2022/7/7_2.py b/2022/7/7_2.py new file mode 100644 index 0000000..89cde09 --- /dev/null +++ b/2022/7/7_2.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# 2022 - Advent Of Code 7 part 2 + +# file = 'input_example.txt' +file = 'input.txt' + +dir_history = "" +dir_size = {} +cur_dir = '' +with open(file, encoding="utf-8") as f: + for line in f.readlines(): + if line.startswith('$'): + command = line.strip().split(' ')[1] + # print(f'command: {command} received') + if command == 'ls': + print(f'listing directory {dir_history}') + elif command == 'cd': + new_dir = line.strip().split(' ')[2] + if new_dir == '..': + cur_size = dir_size[dir_history] + dir_history = dir_history[:dir_history.rfind('/')] + dir_size[dir_history] += cur_size + print(f'back to directory {dir_history}') + else: + if new_dir.endswith('/'): + dir_history += new_dir + else: + dir_history += "/" + new_dir + print(f'changing directory to {dir_history}') + dir_size[dir_history] = 0 + else: + if line.startswith('dir'): + directory = line.strip().split(' ')[1] + print(f'found dir {directory}') + else: + size, filename = line.strip().split(' ') + print(f'found file {filename} of size {size}') + dir_size[dir_history] += int(size) + + +# back to root to account dirs +while len(dir_history) > 1: + cur_size = dir_size[dir_history] + dir_history = dir_history[:dir_history.rfind('/')] + dir_size[dir_history] += cur_size + +print(dir_size) + +needed_space = 30000000 - (70000000 - dir_size['/']) +print(f'needed space: {needed_space}') + +sizes = list(dir_size.values()) +sizes.sort() +for s in sizes: + if s > needed_space: + print(s) + break