#!/usr/bin/env python my_input = None with open("/home/login/bin/advent/input16.txt") as f: my_input = f.read().split(",") my_input = [[item[0], item[1:].split("/")] for item in my_input] my_list = [chr(i) for i in range(ord('a'),ord('p')+1)] my_new_list = ["" for i in [None]*len(my_list)] my_new_list = [my_new_list[i]+my_list[i] for i in range(0,len(my_list))] def parse(my_list, command, arg_list): arg1 = arg_list[0] if len(arg_list)>1: arg2 = arg_list[1] if command == "s": # spin temp = my_list[:-1*int(arg1)] my_list[:-1*int(arg1)] = my_list[-1*int(arg1):] my_list[-1*int(arg1):] = temp return my_list elif command == "x": # exchange temp = my_list[int(arg1)] my_list[int(arg1)] = my_list[int(arg2)] my_list[int(arg2)] = temp return my_list elif command == "p": # partner arg1_index = my_list.index(arg1) arg2_index = my_list.index(arg2) temp = my_list[arg1_index] my_list[arg1_index] = my_list[arg2_index] my_list[arg2_index] = temp return my_list for item in my_input: my_new_list = parse(my_new_list, *item) answer1 = ''.join(my_new_list) print("Part 1: " + answer1) for i in range(1,100): for item in my_input: my_new_list = parse(my_new_list, *item) if my_list == my_new_list: for j in [None]*(1000000000%(i+1)): for item in my_input: my_new_list = parse(my_new_list, *item) break answer2 = ''.join(my_new_list) print("Part 2: " + answer2)