1
0
Fork 0
adventofcode/2017/10/knot.py

31 lines
917 B
Python
Executable File

#!/usr/bin/env python3
import sys
line = sys.stdin.readline()
intdata = [int(n) for n in line.strip().split(",")]
bytedata = [ord(n) for n in line] + [17, 31, 73, 47, 23]
def run(lengths, times):
numbers, current, skip = list(range(256)), 0, 0
for _ in range(times):
for length in lengths:
for i in range(length // 2):
first = (current + i) % len(numbers)
second = (current + length - 1 - i) % len(numbers)
numbers[first], numbers[second] = numbers[second], numbers[first]
current += length + skip
skip += 1
return numbers
def dense(numbers):
r = ""
for i in range(len(numbers) // 16):
num = 0
for j in range(16):
num ^= numbers[i*16+j]
r += hex(num)[2:].zfill(2)
return r
result1 = run(intdata, 1)
print(result1[0] * result1[1])
print(dense(run(bytedata, 64)))