/// <summary> /// /// </summary> public static void SolvePartTwo() { LaunchBOOST(); IntCode_V2.SystemId.Enqueue(2); Console.WriteLine(IntCode_V2.Run(IntCode_V2.CurrentProgram)); }
private static void RunFeedbackLoop(string phaseSettings) { String_Utils.GetPermutationOfString(phaseSettings, 0, 4); foreach (string str in String_Utils.PermutationOfString) { int phaseA = Int32.Parse(str[0].ToString()); int phaseB = Int32.Parse(str[1].ToString()); int phaseC = Int32.Parse(str[2].ToString()); int phaseD = Int32.Parse(str[3].ToString()); int phaseE = Int32.Parse(str[4].ToString()); Amplifier_Controller_Software A = new Amplifier_Controller_Software(phaseA, ACS); Amplifier_Controller_Software B = new Amplifier_Controller_Software(phaseB, ACS); Amplifier_Controller_Software C = new Amplifier_Controller_Software(phaseC, ACS); Amplifier_Controller_Software D = new Amplifier_Controller_Software(phaseD, ACS); Amplifier_Controller_Software E = new Amplifier_Controller_Software(phaseE, ACS); A.SystemId.Enqueue(A.PhaseSetting); A.SystemId.Enqueue(0); B.SystemId.Enqueue(B.PhaseSetting); C.SystemId.Enqueue(C.PhaseSetting); D.SystemId.Enqueue(D.PhaseSetting); E.SystemId.Enqueue(E.PhaseSetting); while (!E.IndexPointer.Equals(-1)) { Amplifier_Controller_Software.currentSoftware = A; IntCode_V2.LoadMemory(); A.Output = IntCode_V2.Run(A.Program); B.SystemId.Enqueue(A.Output); IntCode_V2.ClearMemory(); Amplifier_Controller_Software.currentSoftware = B; IntCode_V2.LoadMemory(); B.Output = IntCode_V2.Run(B.Program); C.SystemId.Enqueue(B.Output); IntCode_V2.ClearMemory(); Amplifier_Controller_Software.currentSoftware = C; IntCode_V2.LoadMemory(); C.Output = IntCode_V2.Run(C.Program); D.SystemId.Enqueue(C.Output); IntCode_V2.ClearMemory(); Amplifier_Controller_Software.currentSoftware = D; IntCode_V2.LoadMemory(); D.Output = IntCode_V2.Run(D.Program); E.SystemId.Enqueue(D.Output); IntCode_V2.ClearMemory(); Amplifier_Controller_Software.currentSoftware = E; IntCode_V2.LoadMemory(); E.Output = IntCode_V2.Run(E.Program); if (!E.IndexPointer.Equals(-1)) { A.SystemId.Enqueue(E.Output); } } possibleOutputs.Add(E.Output); } Console.WriteLine(possibleOutputs.Max()); }