/ Python / 2017 / 16.py
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)]))