adventofcode

https://adventofcode.com/
Log | Files | Refs

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")