Ejemplo n.º 1
0
        private static string SetRoverToAction(Coordinates plateauMaxCoordinates, RoverInputs roverInput)
        {
            var newCoordinateX = roverInput.CurrentCoordinate.CoordinateX;
            var newCoordinateY = roverInput.CurrentCoordinate.CoordinateY;
            var newDirection   = roverInput.CurrentDirection.ToUpper();

            foreach (var sequence in roverInput.MovementSequence)
            {
                var movement = sequence.ToString().ToUpper();
                if (movement == Directions.TurnRight || movement == Directions.TurnLeft)
                {
                    newDirection = Directions.SetDirection(newDirection, movement);
                    continue;
                }

                try
                {
                    (newCoordinateX, newCoordinateY) = Rover.Move(newCoordinateX, newCoordinateY, newDirection, movement);
                    if (newCoordinateX > plateauMaxCoordinates.CoordinateX || newCoordinateX < 0 ||
                        newCoordinateY > plateauMaxCoordinates.CoordinateY || newCoordinateY < 0)
                    {
                        throw new Exception(Rover.InvalidMovementSequence);
                    }
                }
                catch (Exception e)
                {
                    return(new RoverFinalLocation(newCoordinateX, newCoordinateY, Rover.InvalidMovementSequence)
                           .ToDisplayString());
                }
            }

            return(new RoverFinalLocation(newCoordinateX, newCoordinateY, newDirection).ToDisplayString());
        }
Ejemplo n.º 2
0
 private static void GetRoverInputs(List <string> martianInputs, List <RoverInputs> roverInputs)
 {
     for (var roverIndex = 1; roverIndex < martianInputs.Count; roverIndex = roverIndex + 2)
     {
         var roverPosition = martianInputs[roverIndex].Trim().Split(' ');
         var roverInput    = new RoverInputs(Convert.ToInt32(roverPosition[0]), Convert.ToInt32(roverPosition[1]),
                                             roverPosition[2],
                                             martianInputs[roverIndex + 1]);
         roverInputs.Add(roverInput);
     }
 }
        private static RoverFinalLocation MoveRover(Coordinates plateauMaxCoordinates, RoverInputs roverInput)
        {
            var newCoordinateX = roverInput.CurrentCoordinate.CoordinateX;
            var newCoordinateY = roverInput.CurrentCoordinate.CoordinateY;
            var newDirection   = roverInput.CurrentDirection;

            foreach (var movement in roverInput.MovementSequence)
            {
                if (movement == Directions.TurnRight || movement == Directions.TurnLeft)
                {
                    newDirection = Directions.SetDirection(newDirection, movement);
                    continue;
                }

                (newCoordinateX, newCoordinateY) = Rover.Move(newCoordinateX, newCoordinateY, newDirection, movement);
                if (newCoordinateX > plateauMaxCoordinates.CoordinateX || newCoordinateX < 0 ||
                    newCoordinateY > plateauMaxCoordinates.CoordinateY || newCoordinateY < 0)
                {
                    return(new RoverFinalLocation(newCoordinateX, newCoordinateY, Rover.InvalidMovementSequence));
                }
            }

            return(new RoverFinalLocation(newCoordinateX, newCoordinateY, newDirection));
        }