with open('AdventOfCode2022/input.txt', 'r') as input:
commands = input.read().split('\n')
def new_dict(name, parent=None):
return {
'name': name,
'parent':parent,
'files': 0,
'dirs': {}
}
root_dict = new_dict(name='/', parent=None)
curr_dict = root_dict
#Build tree of dicts
for i in range(len(commands)):
command_parts = commands[i].split(' ')
if command_parts[0] == '$':
if command_parts[1] == 'cd':
if command_parts[2] == '..':
curr_dict = curr_dict['parent']
elif command_parts[2] == '/':
pass
else:
curr_dict = curr_dict['dirs'][command_parts[2]]
elif command_parts[0] == 'dir':
if command_parts[1] not in curr_dict:
curr_dict['dirs'][command_parts[1]] = new_dict(name=command_parts[1], parent=curr_dict)
elif command_parts[0] == '':
pass
else:
curr_dict['files'] += int(command_parts[0])
#PART ONE
MAX_THRESHOLD = 100000
FINAL_COUNTER = 0
dict_list = []
def parse_dict(t_dict):
folder_total = t_dict['files']
for c_dict in t_dict['dirs'].keys():
folder_total += parse_dict(t_dict['dirs'][c_dict])
global dict_list
dict_list.append(folder_total)
if folder_total < MAX_THRESHOLD:
global FINAL_COUNTER # this is the most embarrassing thing I've ever done
FINAL_COUNTER += folder_total
return folder_total
total_used = parse_dict(root_dict)
print(FINAL_COUNTER)
#PART TWO
TOTAL_SPACE = 70000000
WANTED_SPACE = 30000000
curr_wanted = WANTED_SPACE - (TOTAL_SPACE - total_used)
larger_than_wanted = []
for i in dict_list:
if i > curr_wanted:
larger_than_wanted.append(i)
print(min(larger_than_wanted))
Advent of Code 2022: Day 7
https://adventofcode.com
- 59
- 32
Jump in the discussion.
No email address required.
Finally into the fun problems Congrats to whichever one of you is Sneeds-Feeduck-And-Seeduck! Per usual, cleaned up a bit before posting.
Jump in the discussion.
No email address required.
More options
Context