10.py
1 from lib import * 2 3 input = read_input(2017, 10).strip() 4 5 6 nums = [*range(256)] 7 pos = 0 8 skip = 0 9 10 11 def rev(a, b): 12 a %= len(nums) 13 b = (b - a) % len(nums) 14 nums[:] = nums[a:] + nums[:a] 15 nums[:b] = nums[:b][::-1] 16 nums[:] = nums[-a:] + nums[:-a] 17 18 19 for length in map(int, input.split(",")): 20 rev(pos, pos + length) 21 pos += length + skip 22 skip += 1 23 24 print(nums[0] * nums[1]) 25 26 27 lengths = [*map(ord, input), 17, 31, 73, 47, 23] 28 nums = [*range(256)] 29 pos = 0 30 skip = 0 31 32 33 def rev(a, b): 34 a %= len(nums) 35 b = (b - a) % len(nums) 36 nums[:] = nums[a:] + nums[:a] 37 nums[:b] = nums[:b][::-1] 38 nums[:] = nums[-a:] + nums[:-a] 39 40 41 for _ in range(64): 42 for length in lengths: 43 rev(pos, pos + length) 44 pos += length + skip 45 skip += 1 46 47 dense = [] 48 for i in range(16): 49 x = 0 50 for j in range(16): 51 x ^= nums[i * 16 + j] 52 53 dense.append(x) 54 55 print("".join(f"{x:02x}" for x in dense))