private void Run(long[] code, long seq1, long seq2, long seq3, long seq4, long seq5)
        {
            long?maxThrusterSignal = null;
            var  seqCombinations   = new AmplifierController().AllCombination(seq1, seq2, seq3, seq4, seq5);

            foreach (var seq in seqCombinations)
            {
                var resultAmp1 = IntCodeComputer.ProcessWithUserInput(Clone(code), new long[] { seq[0], 0 });
                var resultAmp2 = IntCodeComputer.ProcessWithUserInput(Clone(code), SetInput(seq[1], resultAmp1.Output));
                var resultAmp3 = IntCodeComputer.ProcessWithUserInput(Clone(code), SetInput(seq[2], resultAmp2.Output));
                var resultAmp4 = IntCodeComputer.ProcessWithUserInput(Clone(code), SetInput(seq[3], resultAmp3.Output));
                var resultAmp5 = IntCodeComputer.ProcessWithUserInput(Clone(code), SetInput(seq[4], resultAmp4.Output));

                if (!(resultAmp1.IsHalted && resultAmp2.IsHalted && resultAmp3.IsHalted && resultAmp4.IsHalted && resultAmp5.IsHalted))
                {
                    throw new Exception("amp1 is halted, while at least one amp is not halted");
                }

                var output = resultAmp5.Output;
                if (output.Count != 1)
                {
                    throw new Exception($"Unepected number of output. Expected 1, actual {output.Count}");
                }
                if (maxThrusterSignal == null || maxThrusterSignal.Value < output[0])
                {
                    Output            = output;
                    maxThrusterSignal = Output[0];
                }
            }
            if (!maxThrusterSignal.HasValue)
            {
                throw new Exception("Did not find the maximum Thruster Signal");
            }
            MaxThrusterSignal = maxThrusterSignal.Value;
        }
        public static AmplifierController RunSequenceOnAmplifiers(long[] input, long seq1, long seq2, long seq3, long seq4, long seq5)
        {
            var result = new AmplifierController();

            result.Run(input, seq1, seq2, seq3, seq4, seq5);
            return(result);
        }