puzzle16.py (868B)
1 with open('files/puzzle16.txt') as f: 2 moves = f.read().split(',') 3 4 programs = list("abcdefghijklmnop") 5 permutations = [] 6 7 for d in range(1, 1000): 8 permutations.append("".join(programs)) 9 for move in moves: 10 if move[0] == 's': 11 programs = programs[len(programs) - int(move[1:]):] + programs[:len(programs) - int(move[1:])] 12 if move[0] == 'x': 13 indices = [int(i) for i in move[1:].split('/')] 14 programs[indices[0]], programs[indices[1]] = programs[indices[1]], programs[indices[0]] 15 if move[0] == 'p': 16 partners = move[1:].split('/') 17 i, j = programs.index(partners[0]), programs.index(partners[1]) 18 programs[i], programs[j] = programs[j], programs[i] 19 if "".join(programs) == "abcdefghijklmnop": 20 break 21 22 print permutations[1] 23 print permutations[1000000000 % d]