Easy one today. And on the first day I switched to python

This commit is contained in:
Connor Johnstone
2023-12-14 23:11:11 -07:00
parent d5b3be1b2c
commit b7343dc6d5
8 changed files with 159 additions and 0 deletions

47
day_15/part2.py Normal file
View File

@@ -0,0 +1,47 @@
def test(input, solution):
print(f"Running input {input}")
result = process(input)
print(f"Solution was {result}")
assert result == solution
def run():
file = open("input.txt", "r")
return process(file.read()[:-1])
def hash_value(word):
count = 0
for character in word:
count += ord(character)
count *= 17
count = count % 256
return count
def process(input):
labels = []
focal_lengths = []
for _ in range(256):
labels.append([])
focal_lengths.append([])
words = input.split(",")
for word in words:
if word[-1] == "-":
label = word[:-1]
index = hash_value(label)
if label in labels[index]:
inner_index = labels[index].index(label)
labels[index].pop(inner_index)
focal_lengths[index].pop(inner_index)
else:
[label, focal_length] = word.split("=")
index = hash_value(label)
if label in labels[index]:
inner_index = labels[index].index(label)
focal_lengths[index][inner_index] = focal_length
else:
labels[index].append(label)
focal_lengths[index].append(focal_length)
total = 0
for (box_number, (label_list, focal_length_list)) in enumerate(zip(labels, focal_lengths)):
for (lens_number, (label, focal_length)) in enumerate(zip(label_list, focal_length_list)):
total += (box_number + 1) * (lens_number + 1) * int(focal_length)
return total