66 lines
1.5 KiB
Python
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)
|