Files
AdventOfCode/2023/day15/code.py
T
2023-12-15 09:10:47 +01:00

48 lines
1.2 KiB
Python
Executable File

#!/usr/bin/env python3
import sys, re
def HASH(string):
res = 0
for a in string:
res += ord(a)
res = res * 17 % 256
return res
if __name__ == '__main__':
instr = open(sys.argv[1]).read().strip('\n').split(',')
# challenge 1
res1 = sum([HASH(a) for a in instr])
boxes = {}
for i in instr:
label, op, focus = re.findall(r'(\w+)(\-|\=)(\d*)', i)[0]
box = HASH(label)
if not box in boxes.keys(): boxes[box] = []
present = boxes[box]
if op == '=':
for i, lens in enumerate(present):
if lens[0] == label: present[i] = (label, int(focus))
if not (label, int(focus)) in present: present.append((label, int(focus)))
elif op == '-':
for i, lens in enumerate(present):
if lens[0] == label:
present.remove(lens)
break
res2 = 0
for b, lenses in boxes.items():
for i,l in enumerate(lenses):
res2 += (b+1) * (i+1) * l[1]
res1 = str(res1)
print(f"challenge 1:\n{res1}\n")
# challenge 2
res2 = str(res2)
print(f"challenge 2:\n{res2}\n")