AdventOfCode/Python/2022/07/main.py
2024-12-02 11:16:28 -08:00

74 lines
1.8 KiB
Python

input = open("input", 'r')
# input = open("sample", 'r')
FS_SIZE = 70000000
NEEDED_SIZE = 30000000
data = {}
point = None
data2 = []
curdir = []
mode = 0
subtotal = 0
for line in input:
line = line.strip()
if mode == 1:
if line[0] == "$":
mode = 0
point = data
for dr in curdir:
if dr not in point:
point[dr] = {}
point = point[dr]
point["size"] = subtotal
subtotal = 0
else:
one, two = line.split(" ")
if one == "dir":
continue
subtotal += int(one)
if mode == 0:
if line == "$ ls":
mode = 1
else:
d, cd, target = line.split(" ")
if target == "..":
curdir.pop()
else:
curdir.append(target)
def normalize_size(data):
for drs in data:
if drs == "size":
continue
data["size"] += normalize_size(data[drs])
return data["size"]
def sum_fewer(data):
total = 0
for drs in data:
if drs == "size":
continue
total += sum_fewer(data[drs])
if data["size"] < 100000:
return data["size"] + total
return total
def find_smallest_size(data, size):
result = []
if data["size"] > size:
result.append(data["size"])
for drs in data:
if drs == "size":
continue
result += find_smallest_size(data[drs], size)
return result
normalize_size(data["/"])
print(sum_fewer(data["/"]))
FREE_SPACE = FS_SIZE - data["/"]["size"]
MISSING_SPACE = NEEDED_SIZE - FREE_SPACE
dirs = find_smallest_size(data["/"], MISSING_SPACE)
print(sorted(dirs)[1]) # For some reason the minimum wasn't correct /shrug