public static void Run() { List <string> linesInput = File.ReadAllLines(Util.ReadFromInputFolder(19)).ToList(); int controlPointer = Convert.ToInt32(linesInput.First().Between("#ip ")); linesInput.RemoveAt(0); int instructionPosition = 0; foreach (string line in linesInput) { string[] lineInstruc = line.Split(' '); Tuple <string, int[]> instruct = new Tuple <string, int[]>(lineInstruc[0], new int[6]); instruct.Item2[1] = Convert.ToInt32(lineInstruc[1]); instruct.Item2[2] = Convert.ToInt32(lineInstruc[2]); instruct.Item2[3] = Convert.ToInt32(lineInstruc[3]); dctInstructions.Add(instructionPosition, instruct); instructionPosition++; } while (true) { if (dctInstructions.ContainsKey(baseRegister[controlPointer]) == false) { break; } var currRegister = dctInstructions[baseRegister[controlPointer]]; ExecuteInstruction(currRegister.Item1, currRegister.Item2); baseRegister[controlPointer] = (baseRegister[controlPointer] + 1); } Console.WriteLine("PART 1: " + baseRegister[0] + " " + baseRegister[1] + " " + baseRegister[2] + " " + baseRegister[3] + " " + baseRegister[4] + " " + baseRegister[5]); //Find out which register do i need the sum of factors for int chosenRegistry = 0; for (int i = 1; i < 6; i++) { if (baseRegister[0] == Util.divSum(baseRegister[i])) { chosenRegistry = i; break; } } baseRegister = new int[6]; baseRegister[0] = 1; for (int i = 0; i < 1000; i++) { if (dctInstructions.ContainsKey(baseRegister[controlPointer]) == false) { break; } var currRegister = dctInstructions[baseRegister[controlPointer]]; ExecuteInstruction(currRegister.Item1, currRegister.Item2); baseRegister[controlPointer] = (baseRegister[controlPointer] + 1); } Console.WriteLine("PART 2: " + Util.divSum(baseRegister[chosenRegistry])); }