public static void Part1(string codeFile) { var phases = new int[] { 0, 1, 2, 3, 4 }; var output = 0; var outputs = new List <int>(); var phasesettings = new int[] { 0, 1, 2, 3, 4 }; List <string> range = new List <string>(); GetPermutations(phases, ref range); int finaloutput = 0; foreach (var r in range) { for (int i = 0; i < 5; i++) { phasesettings = r.ToList() .Select(x => int.Parse(x.ToString())) .ToArray(); var code = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); var amp = new IntCodeMachine(); amp.RunProgram(code, new int[] { phasesettings[i], output }); output = amp.outputs.Last(); outputs.Add(output); } finaloutput = Math.Max(finaloutput, outputs.Last()); outputs.Clear(); output = 0; } Console.WriteLine(finaloutput); }
public static void Part2(string codeFile) { var output = 0; var outputs = new List <int>(); var phasesettings = new int[] { 9, 8, 7, 6, 5 }; List <string> range = new List <string>(); GetPermutations(phasesettings, ref range); int finaloutput = 0; foreach (var r in range) { phasesettings = r.ToList() .Select(x => int.Parse(x.ToString())) .ToArray(); var amp1 = new IntCodeMachine(); var amp2 = new IntCodeMachine(); var amp3 = new IntCodeMachine(); var amp4 = new IntCodeMachine(); var amp5 = new IntCodeMachine(); var code1 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); var code2 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); var code3 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); var code4 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); var code5 = Utilities.ReadFileAsString(codeFile).Split(',').Select(int.Parse).ToArray(); bool initSetup = true; while (true) { var isdone = 0; int[] inp1 = initSetup ? new int[] { phasesettings[0], output } : new int[] { output }; isdone += amp1.RunProgram(code1, inp1, true); output = amp1.outputs.Last(); int[] inp2 = initSetup ? new int[] { phasesettings[1], output } : new int[] { output }; isdone += amp2.RunProgram(code2, inp2, true); output = amp2.outputs.Last(); int[] inp3 = initSetup ? new int[] { phasesettings[2], output } : new int[] { output }; isdone += amp3.RunProgram(code3, inp3, true); output = amp3.outputs.Last(); int[] inp4 = initSetup ? new int[] { phasesettings[3], output } : new int[] { output }; isdone += amp4.RunProgram(code4, inp4, true); output = amp4.outputs.Last(); int[] inp5 = initSetup ? new int[] { phasesettings[4], output } : new int[] { output }; isdone += amp5.RunProgram(code5, inp5, true); output = amp5.outputs.Last(); outputs.Add(output); if (initSetup) { initSetup = false; } if (isdone != 0) { break; } } finaloutput = Math.Max(finaloutput, outputs.Last()); outputs.Clear(); output = 0; } Console.WriteLine(finaloutput); }