puzzle10.py (1098B)
1 import sys 2 3 with open('files/puzzle10.txt') as f: 4 blep = f.read() 5 puzzle_input = [int(c) for c in blep.split(',')] 6 puzzle_ascii = "" 7 if len(sys.argv) > 1: 8 puzzle_ascii = [ord(c) for c in sys.argv[1]] 9 else: 10 puzzle_ascii = [ord(c) for c in blep[:len(blep) - 1]] 11 puzzle_ascii.extend([17, 31, 73, 47, 23]) 12 13 def round(this_input, this_list, skip, pos): 14 for length in this_input: 15 twist = reversed([this_list[i % len(this_list)] for i in range(pos[0], pos[0] + length)]) 16 for i, t in zip(range(pos[0], pos[0] + length), twist): 17 this_list[i % len(this_list)] = t 18 pos[0] += length + skip[0] 19 skip[0] += 1 20 21 my_list = [i for i in range(256)] 22 round(puzzle_input, my_list, [0], [0]) 23 print my_list[0] * my_list[1] 24 25 my_list = [i for i in range(256)] 26 skip, pos = [0], [0] 27 28 for i in range(64): 29 round(puzzle_ascii, my_list, skip, pos) 30 31 knot_hash = [] 32 33 for block in [my_list[i:i + 16] for i in range(0, len(my_list), 16)]: 34 knot_hash.append(chr(reduce(lambda x, y: x ^ y, block))) 35 36 print "".join(knot_hash).encode("base64")