private static long RunFeedbackAmplifier(long[] computerInput, out List <long> maxOutputCombination) { var phaseCombinations = GenerateLists(new List <long>(), new List <long>() { 5, 6, 7, 8, 9 }); var maxOutput = long.MinValue; maxOutputCombination = new List <long>(); var combinationCounter = 0; foreach (var phaseCombination in phaseCombinations) { Console.WriteLine("Trying combination {0}", combinationCounter++); var lastAmplifier = new IntComputer(new long[] { 99 }); var firstInput = new IntComputerInput(); var amplifierThreads = new List <Thread>(); foreach (var phase in phaseCombination) { var amplifier = new IntComputer((long[])computerInput.Clone()); var input = new IntComputerInput(phase); if (amplifierThreads.Count == 0) { input.AddValue(0); firstInput = input; } else if (amplifierThreads.Count == 4) { lastAmplifier.Connector = input; amplifier.Connector = firstInput; } else { lastAmplifier.Connector = input; } var newRunThread = new Thread(() => amplifier.Run(input)); amplifierThreads.Add(newRunThread); newRunThread.Start(); lastAmplifier = amplifier; } foreach (var thread in amplifierThreads) { thread.Join(); } if (lastAmplifier.GetOutput() > maxOutput) { maxOutput = lastAmplifier.GetOutput(); maxOutputCombination = phaseCombination; } } return(maxOutput); }
public static void Main(string[] args) { Console.WriteLine("Running Main"); /* * var test1FbAmplifierInput = new long[] {3,26,1001,26,-4,26,3,27,1002,27,2,27,1,27,26,27,4,27,1001,28,-1,28,1005,28,6,99,0,0,5}; * Console.WriteLine("Feedback Test 1 Result {0} from {2} - Expected {1}", * RunFeedbackAmplifier(test1FbAmplifierInput, out var maxOutputCombinationFbTest1), 139629729, string.Join(",", maxOutputCombinationFbTest1)); * * var test2FbAmplifierInput = new long[] {3,52,1001,52,-5,52,3,53,1,52,56,54,1007,54,5,55,1005,55,26,1001,54,-5,54,1105,1,12,1,53,54,53,1008,54,0,55,1001,55,1,55,2,53,55,53,4,53,1001,56,-1,56,1005,56,6,99,0,0,0,0,10}; * Console.WriteLine("Feedback Test 2 Result {0} from {2} - Expected {1}", * RunFeedbackAmplifier(test2FbAmplifierInput, out var maxOutputCombinationFbTest2), 18216, string.Join(",", maxOutputCombinationFbTest2)); * * var part2Output = RunFeedbackAmplifier((long[])Day7Input.Clone(), out var part2OutputCombination); * Console.WriteLine("Maximum feedback amplifier output achieved at {0} using combination {1}", * part2Output, string.Join(",",part2OutputCombination.ToArray())); */ //Day 9 var computer = new IntComputer((long[])Day9Program.Clone()); var input = new IntComputerInput(1); computer.Connector = new OutputPrinter(); computer.Run(input); Console.WriteLine($"Day 9 part 1 final output: {computer.GetOutput()}"); var computer2 = new IntComputer((long[])Day9Program.Clone()); var input2 = new IntComputerInput(2); computer2.Connector = new OutputPrinter(); computer2.Run(input2); Console.WriteLine($"Day 9 part 2 final output: {computer2.GetOutput()}"); }