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.
it got super messy, but i had fun solving this one tbh. the way i built my all_dirs list in particular is pretty hacky and scuffed, please tell me the smarter way to do it
Jump in the discussion.
No email address required.
You are the first dramatard who managed to subtract 3 from 7 LMAO.
Jump in the discussion.
No email address required.
Jump in the discussion.
No email address required.
Don't get too proud of yourself,
if line[0] in tuple("1234567890")
is unnecessary on several levels, alsofor _ in range(1000):
is quite pointless.Jump in the discussion.
No email address required.
which way is better?
true it's r-slurred but it just werked
Jump in the discussion.
No email address required.
if line[0] in "1234567890"
would work but at that point why not just force-cast the whole thing to int and see what happens?I honestly don't get what it does: is it the megatard way of building subdirectory trees?
Jump in the discussion.
No email address required.
oh
it gets a layer deeper every pass. i decided to do that because i thought of it fast. unlike many other (cowardly) uses here, i dont change my code at all before posting other than adding # part 1 and # part 2. embrace the megatard within.
Jump in the discussion.
No email address required.
tardking shit my neighbor
Jump in the discussion.
No email address required.
More options
Context
More options
Context
More options
Context
More options
Context
More options
Context
More options
Context
But that's a magic number! Those are bad!
Jump in the discussion.
No email address required.
hey atheists, if you don't believe in magic, how come you are afraid of magic numbers? checkmate
Jump in the discussion.
No email address required.
More options
Context
More options
Context
More options
Context
Have you owned the libs yet?
Jump in the discussion.
No email address required.
More options
Context
More options
Context