예제 #1
0
        public object PartTwo(string input)
        {
            var icm = new IntCodeMachine(input);

            icm.memory[0] = 2;
            var score      = 0;
            var icolBall   = -1;
            var icolPaddle = -1;
            var dir        = 0;

            while (true)
            {
                var output = icm.Run(dir);
                var chunks = Chunk(output, 3);
                foreach (var chunk in chunks)
                {
                    var(icol, irow, block) = (chunk[0], chunk[1], chunk[2]);
                    if ((icol, irow) == (-1, 0))
                    {
                        score = (int)block;
                    }
                    if (block == 3)
                    {
                        icolPaddle = (int)icol;
                    }
                    else if (block == 4)
                    {
                        icolBall = (int)icol;
                    }
                }

                if (icm.Halted())
                {
                    break;
                }

                dir =
                    icolBall <icolPaddle ? -1 :
                              icolBall> icolPaddle ? 1 :
                    0;
            }
            return(score);
        }