public void Should_ComputeCorrectSignal(int[] expected, int[] data) { var program = IntCodeProgram.New(); program.Compute(data); Assert.Equal(expected, program.Output.Select(val => (int)val).ToArray()); }
public void Should_OutputLargeNumberInTheMiddle() { var data = new BigInteger[] { 104, 1125899906842624, 99 }; var program = IntCodeProgram.New(); program.Compute(IntCodeData.FromBigIntArray(data)); var number = program.Output.Single(); Assert.Equal(IntCodeValue.FromBigInteger(data[1]), number); }
public void Should_Output16DigitNumber() { var data = new int[] { 1102, 34915192, 34915192, 7, 4, 7, 99, 0 }; var program = IntCodeProgram.New(); program.Compute(IntCodeData.FromIntArray(data)); var number = program.Output.Single(); Assert.Equal(16, number.ToString().Length); }
public int ComputeSignal(IList <IntCodeValue> phaseSettings, int[] data) { var amplifiers = new IIntCodeProgram[phaseSettings.Count]; var firstInput = new BlockingCollection <IntCodeValue>(); for (var i = 0; i < amplifiers.Length; i++) { var input = i == 0 ? firstInput : amplifiers[i - 1].Output; input.Add(phaseSettings[i]); if (_feedbackLoop && i == amplifiers.Length - 1) { amplifiers[i] = IntCodeProgram.New(input, firstInput); } else { amplifiers[i] = IntCodeProgram.New(input); } } var tasks = amplifiers.Select(program => Task.Factory.StartNew(() => program.Compute(data.ToArray()), TaskCreationOptions.LongRunning)); firstInput.Add(IntCodeValue.FromInt(0)); Task.WhenAll(tasks).Wait(TimeoutMs); var took = amplifiers.Last().Output.TryTake(out var signal); if (!took) { throw new InvalidOperationException("No output found."); } if (amplifiers.Last().Output.Count != 0) { throw new InvalidOperationException("There's still output in the last amplifier."); } return((int)signal); }
public void Should_ReturnCorrectResult(int[] data, int[] expected) { var result = IntCodeProgram.New().Compute(data); Assert.Equal(expected, result); }
public int ComputeAndGetOutput(int[] data) { return(IntCodeProgram.New().Compute(data)[0]); }
protected virtual IIntCodeProgram CreateIntCodeProgram(BlockingCollection <IntCodeValue> input) { return(IntCodeProgram.New(input)); }