day 10 solution, helped by reddit
parent
c35022d195
commit
09386dadcb
|
@ -0,0 +1,58 @@
|
||||||
|
from time import time
|
||||||
|
|
||||||
|
|
||||||
|
def reverse(text, repeat):
|
||||||
|
knot = list(range(256))
|
||||||
|
pos = 0
|
||||||
|
skip = 0
|
||||||
|
for isntevenused in range(repeat):
|
||||||
|
for i in text:
|
||||||
|
temp = []
|
||||||
|
for j in range(i):
|
||||||
|
temp.append(knot[(pos+j) % 256])
|
||||||
|
for j in range(i):
|
||||||
|
knot[(pos+i-1-j) % 256] = temp[j]
|
||||||
|
pos += skip + i
|
||||||
|
skip += 1
|
||||||
|
return knot
|
||||||
|
|
||||||
|
|
||||||
|
def dense(knot):
|
||||||
|
dense = [0]*16
|
||||||
|
for i in range(16):
|
||||||
|
dense[i] = knot[16*i]
|
||||||
|
for m in range(1, 16):
|
||||||
|
dense[i] ^= knot[16*i+m]
|
||||||
|
return dense
|
||||||
|
|
||||||
|
|
||||||
|
def kh(dense):
|
||||||
|
knothash = ''
|
||||||
|
for i in dense:
|
||||||
|
if len(hex(i)[2:]) == 2:
|
||||||
|
knothash += hex(i)[2:]
|
||||||
|
else:
|
||||||
|
knothash += '0' + hex(i)[2:]
|
||||||
|
return knothash
|
||||||
|
|
||||||
|
|
||||||
|
start = time()
|
||||||
|
|
||||||
|
inp = '102,255,99,252,200,24,219,57,103,2,226,254,1,0,69,216'
|
||||||
|
text = [102,255,99,252,200,24,219,57,103,2,226,254,1,0,69,216]
|
||||||
|
text2 = []
|
||||||
|
|
||||||
|
for i in range(len(inp)):
|
||||||
|
text2.append(ord(inp[i]))
|
||||||
|
text2 += [17, 31, 73, 47, 23]
|
||||||
|
|
||||||
|
knot = reverse(text, 1)
|
||||||
|
sparce = reverse(text2, 64)
|
||||||
|
|
||||||
|
dense = dense(sparce)
|
||||||
|
knothash = kh(dense)
|
||||||
|
|
||||||
|
print('Part One: ' + str(knot[0]*knot[1]))
|
||||||
|
print('Part Two: ' + knothash)
|
||||||
|
print('Completed in ' + str(time() - start) + ' seconds.')
|
||||||
|
|
Loading…
Reference in New Issue