コード例 #1
0
        public int GetPart1ManhattanDistance()
        {
            var shipCoordinates  = new Point(0, 0);
            var currentDirection = ShipDirection.Direction.East;

            foreach (IInstruction instruction in Instructions)
            {
                if (instruction is IDirection)
                {
                    IDirection direction     = instruction as IDirection;
                    Point      newCoordinate = direction.Execute();
                    shipCoordinates.X += newCoordinate.X;
                    shipCoordinates.Y += newCoordinate.Y;
                }

                if (instruction is IMovement)
                {
                    IMovement movement      = instruction as IMovement;
                    Point     newCoordinate = movement.Part1Execute(currentDirection);
                    shipCoordinates.X += newCoordinate.X;
                    shipCoordinates.Y += newCoordinate.Y;
                }

                if (instruction is IRotation)
                {
                    IRotation rotation = instruction as IRotation;
                    currentDirection = rotation.Part1Execute(currentDirection);
                }
            }

            return(Math.Abs(shipCoordinates.X) + Math.Abs(shipCoordinates.Y));
        }