Files
AdventOfCode2023/15/15-2.py
2023-12-15 16:45:15 +01:00

66 lines
1.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
data = []
# parse input
input_file = open("input", "r")
pattern = []
for line in input_file:
for value in line.rstrip().split(","):
data.append(value)
input_file.close()
def get_hash(val):
hav = 0
for b in val:
hav += ord(b)
hav *= 17
hav %= 256
return hav
hashsum = 0
boxes = {}
for value in data:
if value.count("-") == 1:
value = value.replace("-", "=")
h = get_hash(value[:-1])
if h in boxes.keys():
lin = boxes[h]
x = -1
for j in range(len(lin)):
if lin[j].startswith(value):
x = j
if x != -1:
lin.pop(x)
if len(lin) == 0:
boxes.pop(h)
else:
boxes[h] = lin
else:
hv = value.split("=")[0]
h = get_hash(hv)
ersetzt = False
if h in boxes.keys():
linsen = boxes[h]
for i in range(len(linsen)):
if linsen[i].startswith(hv+"="):
linsen[i] = value
ersetzt = True
if not ersetzt:
linsen.append(value)
boxes[h] = linsen
else:
boxes[h] = [value]
print(boxes)
solution = 0
for key in boxes.keys():
for k in range(len(boxes[key])):
print(key+1, k+1, int(boxes[key][k].split("=")[1]))
solution += ((key+1) * (k+1) * int(boxes[key][k].split("=")[1]))
print("Solution", solution)