public long RunTestsAndGetResultPartTwo() { RunTestsPartTwo(); var amp = new AmplificationCircuit(new long[] { 3, 8, 1001, 8, 10, 8, 105, 1, 0, 0, 21, 34, 51, 76, 101, 114, 195, 276, 357, 438, 99999, 3, 9, 1001, 9, 3, 9, 1002, 9, 3, 9, 4, 9, 99, 3, 9, 101, 4, 9, 9, 102, 4, 9, 9, 1001, 9, 5, 9, 4, 9, 99, 3, 9, 1002, 9, 4, 9, 101, 3, 9, 9, 102, 5, 9, 9, 1001, 9, 2, 9, 1002, 9, 2, 9, 4, 9, 99, 3, 9, 1001, 9, 3, 9, 102, 2, 9, 9, 101, 4, 9, 9, 102, 3, 9, 9, 101, 2, 9, 9, 4, 9, 99, 3, 9, 102, 2, 9, 9, 101, 4, 9, 9, 4, 9, 99, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 99, 3, 9, 101, 2, 9, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 101, 1, 9, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 99, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 99, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 101, 1, 9, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 3, 9, 102, 2, 9, 9, 4, 9, 99, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 3, 9, 101, 1, 9, 9, 4, 9, 3, 9, 101, 2, 9, 9, 4, 9, 3, 9, 101, 1, 9, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 3, 9, 1001, 9, 1, 9, 4, 9, 3, 9, 1001, 9, 2, 9, 4, 9, 3, 9, 1002, 9, 2, 9, 4, 9, 99 }); return(amp.RunFeedbackCircuitPermutations(new int[] { 9, 8, 7, 6, 5 })); }
public void RunTestsPartTwo() { var amp = new AmplificationCircuit(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 }); var output = amp.RunFeedbackCircuitPermutations(new int[] { 9, 5, 6, 8, 7 }); if (output != 18216) { throw new System.Exception("Day Seven part two Test one " + output + " should be 18216"); } else { Console.WriteLine("Day Seven part two Test one passed"); } amp = new AmplificationCircuit(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 }); output = amp.RunFeedbackCircuitPermutations(new int[] { 9, 8, 7, 6, 5 }); if (output != 139629729) { throw new System.Exception("Day Seven part two Test two" + output + " should be 139629729"); } else { Console.WriteLine("Day Seven part two Test one Test two passed"); } }
public int Then_max_is_correct(string program, int[] phaseSequence) { var amplificationCircuit = new AmplificationCircuit(program); amplificationCircuit.RunLooped(phaseSequence); return(amplificationCircuit.MaxThrusterSignal); }
// [InlineData(18216, 97856, // "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")] public void Feedback(long expected, int sequence, string program) { var prg = ProgramAlarm.CreateProgram(program.ToBigNumbers()); var computer = ProgramAlarm.CreateStateMaschine(); var states = AmplificationCircuit.SetUpStates(prg, sequence); Assert.Equal(expected, computer.ComputeLoop(states, 0)); }
public void TestPermutation(int n, int count, int min, int max) { var permutation = AmplificationCircuit.Permutate(n); Assert.Equal(count, permutation.Count()); Assert.Equal(permutation.Count(), permutation.Distinct().Count()); Assert.Equal(min, permutation.Min()); Assert.Equal(max, permutation.Max()); }
public void TestNewPermutation() { var permutation = AmplificationCircuit.Permutate(56789.ToDigits()); Assert.Equal(120, permutation.Count()); Assert.Equal(permutation.Count(), permutation.Distinct().Count()); Assert.Equal(56789, permutation.Min()); Assert.Equal(98765, permutation.Max()); }
public void Part_2() { var amplificationCircuit = new AmplificationCircuit(_testInput); amplificationCircuit.FindHighestSignalFeedbackLoop(); var result = amplificationCircuit.MaxThrusterSignal; Assert.That(result, Is.EqualTo(1047153)); }
public void Part_1() { var amplificationCircuit = new AmplificationCircuit(_testInput); amplificationCircuit.FindHighestSignal(); var result = amplificationCircuit.MaxThrusterSignal; Assert.That(result, Is.EqualTo(17406)); }
public void PuzzleOne() { string input = File.ReadAllText("tests/y2019/Day7.Input.txt"); var prg = ProgramAlarm.CreateProgram(input.ToBigNumbers()); var computer = ProgramAlarm.CreateStateMaschine(); var actual = AmplificationCircuit.Permutate(5) .AsParallel() .Select(sequence => computer.Compute(prg, sequence, 10000, 0)) .Max(); Assert.Equal(38500, actual); }
public async Task Part1_ConcrateExcercise() { // Arrange var subject = new AmplificationCircuit(new ServiceCollection().AddTransient <IIntcodeProgram, IntcodeProgram>().BuildServiceProvider()); var input = "3,8,1001,8,10,8,105,1,0,0,21,38,55,64,81,106,187,268,349,430,99999,3,9,101,2,9,9,1002,9,2,9,101,5,9,9,4,9,99,3,9,102,2,9,9,101,3,9,9,1002,9,4,9,4,9,99,3,9,102,2,9,9,4,9,99,3,9,1002,9,5,9,1001,9,4,9,102,4,9,9,4,9,99,3,9,102,2,9,9,1001,9,5,9,102,3,9,9,1001,9,4,9,102,5,9,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,101,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,99,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,101,1,9,9,4,9,99,3,9,102,2,9,9,4,9,3,9,1001,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,102,2,9,9,4,9,3,9,101,2,9,9,4,9,3,9,101,1,9,9,4,9,3,9,101,1,9,9,4,9,3,9,1001,9,1,9,4,9,3,9,102,2,9,9,4,9,99,3,9,101,1,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,3,9,1002,9,2,9,4,9,3,9,1002,9,2,9,4,9,3,9,101,1,9,9,4,9,3,9,102,2,9,9,4,9,99"; // Act var result = await subject.SolvePart1Async(input.ToMemoryStream()); // Assert Assert.Equal("117312", result); }
public void ComputeOptimalSignal_CircuitOpcodes_ReturnsExpectedOutputSignal(string input, int expectedOutputSignal) { // Arrange var program = input.Split(',').Select(int.Parse).ToList(); const int thrusterCount = 5; var phaseSettings = new[] { '0', '1', '2', '3', '4' }; // Act var result = new AmplificationCircuit().ComputeOptimalSignal(program, thrusterCount, phaseSettings); // Assert result.ShouldBeEquivalentTo(expectedOutputSignal); }
public async Task Part2_Example2() { // Arrange var subject = new AmplificationCircuit(new ServiceCollection().AddTransient <IIntcodeProgram, IntcodeProgram>().BuildServiceProvider()); var input = "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"; // Act var result = await subject.GetMaxThrusterSignalAsync(input.ToMemoryStream(), PhaseSettingsType.FeedbackLoop); // Assert Assert.Equal(18216, result.MaxSignal); Assert.Equal(new[] { 9, 7, 8, 5, 6 }, result.MaxPermutation); }
public async Task Part2_Example1() { // Arrange var subject = new AmplificationCircuit(new ServiceCollection().AddTransient <IIntcodeProgram, IntcodeProgram>().BuildServiceProvider()); var input = "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"; // Act var result = await subject.GetMaxThrusterSignalAsync(input.ToMemoryStream(), PhaseSettingsType.FeedbackLoop); // Assert Assert.Equal(139629729, result.MaxSignal); Assert.Equal(new[] { 9, 8, 7, 6, 5 }, result.MaxPermutation); }
public async Task Part1_Example3() { // Arrange var subject = new AmplificationCircuit(new ServiceCollection().AddTransient <IIntcodeProgram, IntcodeProgram>().BuildServiceProvider()); var input = "3,31,3,32,1002,32,10,32,1001,31,-2,31,1007,31,0,33,1002,33,7,33,1,33,31,31,1,32,31,31,4,31,99,0,0,0"; // Act var result = await subject.GetMaxThrusterSignalAsync(input.ToMemoryStream(), PhaseSettingsType.OneShot); // Assert Assert.Equal(65210, result.MaxSignal); Assert.Equal(new[] { 1, 0, 4, 3, 2 }, result.MaxPermutation); }
public override string GetSolution() { input = GenerateInput(); foreach (var perm in GetPermutations(new long[] { 5, 6, 7, 8, 9 }, 5)) { var ciruit = new AmplificationCircuit(perm.ToArray(), () => input); ciruit.Run(); } Debug.WriteLine($"Max: {MaxOutput} {MaxPerm[0]} {MaxPerm[1]} {MaxPerm[2]} {MaxPerm[3]} {MaxPerm[4]} "); return("end"); }
public void PuzzleTwo() { string input = File.ReadAllText("tests/y2019/Day7.Input.txt"); var prg = ProgramAlarm.CreateProgram(input.ToBigNumbers()); var computer = ProgramAlarm.CreateStateMaschine(); var permutations = AmplificationCircuit .Permutate(56789.ToDigits()).ToList(); var actual = permutations .AsParallel() .Select(sequence => AmplificationCircuit.SetUpStates(prg, sequence)) .Select(states => computer.ComputeLoop(states, 0)) .Max(); Assert.Equal(33660560, actual); }
/// <summary> /// --- Day 7: Amplification Circuit --- /// https://adventofcode.com/2019/day/7 /// </summary> /// <param name="args"></param> public static void Main(string[] args) { if (args.Any(x => x.Equals("--help"))) { Console.WriteLine($"Provide the path to the amplifier controller software .txt file (default: `{DefaultFilePath}`)"); Environment.Exit(Environment.ExitCode); } var codeFilePath = args.FirstOrDefault(x => x.EndsWith(".txt")) ?? DefaultFilePath; var program = File.ReadAllText(codeFilePath) .Split(',') .Select(int.Parse) .ToList(); var result = new AmplificationCircuit().ComputeOptimalSignal(program, 5, new[] { '0', '1', '2', '3', '4' }); Console.WriteLine(result); }
public MainWindow() { InitializeComponent(); AmplificationCircuit c = new AmplificationCircuit(); //c.SolveTask1(); //c.SolveTask2(); SensorBoost s = new SensorBoost(); s.Tests(); ArcadeCabinet ac = new ArcadeCabinet(); ac.solveTask1(); /* * N_BodyProblem prob = new N_BodyProblem(); * */ }
public void StartAmplificationCircuitTest() { AmplificationCircuit c = new AmplificationCircuit(); int[] testProgram = { 3, 15, 3, 16, 1002, 16, 10, 16, 1, 16, 15, 15, 4, 15, 99, 0, 0 }; int[] testPhaseSetting = { 4, 3, 2, 1, 0 }; int result = c.StartAmplificationCircuit(testProgram, testPhaseSetting); Assert.AreEqual(43210, result); int[] testProgram2 = { 3, 23, 3, 24, 1002, 24, 10, 24, 1002, 23, -1, 23, 101, 5, 23, 23, 1, 24, 23, 23, 4, 23, 99, 0, 0 }; int[] testPhaseSetting2 = { 0, 1, 2, 3, 4 }; int result2 = c.StartAmplificationCircuit(testProgram2, testPhaseSetting2); Assert.AreEqual(54321, result2); int[] testProgram3 = { 3, 31, 3, 32, 1002, 32, 10, 32, 1001, 31, -2, 31, 1007, 31, 0, 33, 1002, 33, 7, 33, 1, 33, 31, 31, 1, 32, 31, 31, 4, 31, 99, 0, 0, 0 }; int[] testPhaseSetting3 = { 1, 0, 4, 3, 2 }; int result3 = c.StartAmplificationCircuit(testProgram3, testPhaseSetting3); Assert.AreEqual(65210, result3); }
public void RunTestsPartOne() { var amp = new AmplificationCircuit(new long[] { 3, 15, 3, 16, 1002, 16, 10, 16, 1, 16, 15, 15, 4, 15, 99, 0, 0 }); var output = amp.RunCircuitPermutations(new int[] { 0, 1, 2, 3, 4 }); if (output != 43210) { throw new System.Exception("Day Seven test one: " + output + " should be 43210"); } else { Console.WriteLine("Day Seven Test one passed"); } amp = new AmplificationCircuit(new long[] { 3, 23, 3, 24, 1002, 24, 10, 24, 1002, 23, -1, 23, 101, 5, 23, 23, 1, 24, 23, 23, 4, 23, 99, 0, 0 }); output = amp.RunCircuitPermutations(new int[] { 0, 1, 2, 3, 4 }); if (output != 54321) { throw new System.Exception("Day Seven test two: " + output + " should be 54321"); } else { Console.WriteLine("Day Seven Test two passed"); } amp = new AmplificationCircuit(new long[] { 3, 31, 3, 32, 1002, 32, 10, 32, 1001, 31, -2, 31, 1007, 31, 0, 33, 1002, 33, 7, 33, 1, 33, 31, 31, 1, 32, 31, 31, 4, 31, 99, 0, 0, 0 }); output = amp.RunCircuitPermutations(new int[] { 0, 1, 2, 3, 4 }); if (output != 65210) { throw new System.Exception("Day Seven test one: " + output + " should be 65210"); } else { Console.WriteLine("Day Seven Test three passed"); } }
public void TestAmplificationCircuit(int[] program, int expected) { var output = AmplificationCircuit.FindMaxThrust(program, new[] { 0, 1, 2, 3, 4 }); Assert.AreEqual(expected, output); }
public void TestAmplificationCircuitFeedBackLoop(int[] program, int expected) { var output = AmplificationCircuit.FindMaxThrust(program, new[] { 5, 6, 7, 8, 9 }); Assert.AreEqual(expected, output); }