public string CalculatePart1(string inputFile) { var program = GetProgram(inputFile); var max = 0; var i = new int[5]; var lastOutput = 0; for (i[0] = 0; i[0] < 5; i[0]++) { for (i[1] = 0; i[1] < 5; i[1]++) { for (i[2] = 0; i[2] < 5; i[2]++) { for (i[3] = 0; i[3] < 5; i[3]++) { for (i[4] = 0; i[4] < 5; i[4]++) { if (i.Distinct().Count() < 5) { continue; } for (int ampIndex = 0; ampIndex < 5; ampIndex++) { var a = new IntCodeRunner(program); a.Run(i[ampIndex]); lastOutput = (int)a.Run(lastOutput); } if (lastOutput > max) { max = lastOutput; } lastOutput = 0; } } } } } return(max.ToString()); }
public string CalculatePart2(string inputFile) { var program = GetProgram(inputFile); var max = 0; var i = new int[5]; var lastOutput = 0; var start = 5; var end = 10; for (i[0] = start; i[0] < end; i[0]++) { for (i[1] = start; i[1] < end; i[1]++) { for (i[2] = start; i[2] < end; i[2]++) { for (i[3] = start; i[3] < end; i[3]++) { for (i[4] = start; i[4] < end; i[4]++) { if (i.Distinct().Count() < 5) { continue; } var a = new IntCodeRunner(program); var b = new IntCodeRunner(program); var c = new IntCodeRunner(program); var d = new IntCodeRunner(program); var e = new IntCodeRunner(program); a.Run(i[0]); b.Run(i[1]); c.Run(i[2]); d.Run(i[3]); e.Run(i[4]); int?result = null; lastOutput = 0; do { try { var resultA = a.Run(lastOutput); var resultB = b.Run((int)resultA); var resultC = c.Run((int)resultB); var resultD = d.Run((int)resultC); var resultE = e.Run((int)resultD); result = resultE; if (result.HasValue) { lastOutput = result.Value; } } catch { //Console.WriteLine(exception); break; //throw; } } while (result.HasValue); if (lastOutput > max) { max = lastOutput; } } } } } } return(max.ToString()); }