16.py
1 from lib import * 2 3 input = read_input(2017, 16).strip() 4 5 6 p = [chr(97 + i) for i in range(16)] 7 for cmd in input.split(","): 8 if cmd[0] == "s": 9 n = int(cmd[1:]) 10 p = p[-n:] + p[:-n] 11 elif cmd[0] == "x": 12 a, b = map(int, cmd[1:].split("/")) 13 p[a], p[b] = p[b], p[a] 14 elif cmd[0] == "p": 15 a, b = map(p.index, cmd[1:].split("/")) 16 p[a], p[b] = p[b], p[a] 17 print("".join(p)) 18 19 20 p = [chr(97 + i) for i in range(16)] 21 q = p[:] 22 mem = [] 23 while True: 24 mem.append(p[:]) 25 for cmd in input.split(","): 26 if cmd[0] == "s": 27 n = int(cmd[1:]) 28 p = p[-n:] + p[:-n] 29 elif cmd[0] == "x": 30 a, b = map(int, cmd[1:].split("/")) 31 p[a], p[b] = p[b], p[a] 32 elif cmd[0] == "p": 33 a, b = map(p.index, cmd[1:].split("/")) 34 p[a], p[b] = p[b], p[a] 35 if p == q: 36 break 37 38 print("".join(mem[1000000000 % len(mem)]))