Easy one today. And on the first day I switched to python
This commit is contained in:
47
day_15/part2.py
Normal file
47
day_15/part2.py
Normal 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
|
||||
Reference in New Issue
Block a user