Beispiel #1
0
    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 }));
    }
Beispiel #2
0
    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");
        }
    }
Beispiel #3
0
        public int Then_max_is_correct(string program, int[] phaseSequence)
        {
            var amplificationCircuit = new AmplificationCircuit(program);

            amplificationCircuit.RunLooped(phaseSequence);

            return(amplificationCircuit.MaxThrusterSignal);
        }
Beispiel #4
0
Datei: Day7.cs Projekt: stefc/AoC
        //   [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));
        }
Beispiel #5
0
Datei: Day7.cs Projekt: stefc/AoC
        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());
        }
Beispiel #6
0
Datei: Day7.cs Projekt: stefc/AoC
        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());
        }
Beispiel #7
0
        public void Part_2()
        {
            var amplificationCircuit = new AmplificationCircuit(_testInput);

            amplificationCircuit.FindHighestSignalFeedbackLoop();

            var result = amplificationCircuit.MaxThrusterSignal;

            Assert.That(result, Is.EqualTo(1047153));
        }
Beispiel #8
0
        public void Part_1()
        {
            var amplificationCircuit = new AmplificationCircuit(_testInput);

            amplificationCircuit.FindHighestSignal();

            var result = amplificationCircuit.MaxThrusterSignal;

            Assert.That(result, Is.EqualTo(17406));
        }
Beispiel #9
0
Datei: Day7.cs Projekt: stefc/AoC
        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);
        }
Beispiel #11
0
        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);
        }
Beispiel #15
0
        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");
        }
Beispiel #16
0
Datei: Day7.cs Projekt: stefc/AoC
        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);
        }
Beispiel #18
0
        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);
        }
Beispiel #20
0
    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");
        }
    }
Beispiel #21
0
        public void TestAmplificationCircuit(int[] program, int expected)
        {
            var output = AmplificationCircuit.FindMaxThrust(program, new[] { 0, 1, 2, 3, 4 });

            Assert.AreEqual(expected, output);
        }
Beispiel #22
0
        public void TestAmplificationCircuitFeedBackLoop(int[] program, int expected)
        {
            var output = AmplificationCircuit.FindMaxThrust(program, new[] { 5, 6, 7, 8, 9 });

            Assert.AreEqual(expected, output);
        }