Пример #1
0
        protected override object SolvePart2()
        {
            var vm = new IntcodeVM(Input[0]);

            for (var noun = 0; noun < 100; noun++)
            {
                for (var verb = 0; verb < 100; verb++)
                {
                    vm.Write(1, noun);
                    vm.Write(2, verb);

                    vm.Execute();

                    if (vm.Read(0) != 19690720)
                    {
                        vm.ResetVM();
                        continue;
                    }

                    return(100 * noun + verb);
                }
            }

            return(null);
        }
Пример #2
0
        protected override object SolvePart1()
        {
            var vm = new IntcodeVM(Input[0]);

            vm.Write(1, 12);
            vm.Write(2, 2);
            vm.Execute();

            return(vm.Read(0));
        }
Пример #3
0
        protected override object SolvePart2()
        {
            var vm = new IntcodeVM(Input[0]);

            vm.Write(0, 2);
            var paddle = (X : -1L, Y : -1L);
            var ball   = (X : -1L, Y : -1L);

            while (vm.Execute() != IntcodeVM.HaltMode.Terminated)
            {
                var(Paddle, Ball, _) = ProcessOutput(vm);

                if (Paddle.X != -1 && Paddle.Y != -1)
                {
                    paddle = Paddle;
                }
                if (Ball.X != -1 && Ball.Y != -1)
                {
                    ball = Ball;
                }

                if (ball.X < paddle.X)
                {
                    vm.Input.Enqueue(-1);
                }
                else if (ball.X > paddle.X)
                {
                    vm.Input.Enqueue(1);
                }
                else
                {
                    vm.Input.Enqueue(0);
                }
            }

            var finalState = ProcessOutput(vm);

            return(finalState.Score);
        }