private void MoveForward(MartianRobotUpdateable martianRobot)
 {
     if (martianRobot.Direction.Equals("N"))
     {
         if (HasLimits(martianRobot) && martianRobot.YPosition + 1 > martianRobot.YLimit)
         {
             martianRobot.IsLost = true;
         }
         else
         {
             martianRobot.YPosition += 1;
         }
     }
     else if (martianRobot.Direction.Equals("E"))
     {
         if (HasLimits(martianRobot) && martianRobot.XPosition + 1 > martianRobot.XLimit)
         {
             martianRobot.IsLost = true;
         }
         else
         {
             martianRobot.XPosition += 1;
         }
     }
     else if (martianRobot.Direction.Equals("S"))
     {
         if (HasLimits(martianRobot) && martianRobot.YPosition - 1 < 0)
         {
             martianRobot.IsLost = true;
         }
         else
         {
             martianRobot.YPosition -= 1;
         }
     }
     else if (martianRobot.Direction.Equals("W"))
     {
         if (HasLimits(martianRobot) && martianRobot.XPosition - 1 < 0)
         {
             martianRobot.IsLost = true;
         }
         else
         {
             martianRobot.XPosition -= 1;
         }
     }
 }
        private void CalculateCommand(MartianRobotUpdateable martianRobot, string command)
        {
            if (!martianRobot.IsLost)
            {
                switch (command)
                {
                case "F":
                    MoveForward(martianRobot);
                    break;

                case "L":
                    MoveLeft(martianRobot);
                    break;

                case "R":
                    MoveRight(martianRobot);
                    break;
                }
            }
        }
        private void MoveRight(MartianRobotUpdateable martianRobot)
        {
            switch (martianRobot.Direction)
            {
            case "N":
                martianRobot.Direction = "E";
                break;

            case "E":
                martianRobot.Direction = "S";
                break;

            case "S":
                martianRobot.Direction = "W";
                break;

            case "W":
                martianRobot.Direction = "N";
                break;
            }
        }
        private List <MartianRobotDTO> CalculateCommands(MartianRobotUpdateable martianRobot)
        {
            List <MartianRobotDTO> response = new List <MartianRobotDTO>();
            var commandsAsArray             = martianRobot.Commands.ToStringArray();

            foreach (var item in commandsAsArray)
            {
                CalculateCommand(martianRobot, item);
                var output = martianRobot.XPosition.ToString() + " " + martianRobot.YPosition.ToString() + " " + martianRobot.Direction;
                var result = new MartianRobotDTO()
                {
                    Result = output, X = martianRobot.XPosition, Y = martianRobot.YPosition, Direction = martianRobot.Direction, IsValid = true
                };
                if (martianRobot.IsLost)
                {
                    output         = output + " LOST";
                    result.IsValid = false;
                }
                response.Add(result);
            }
            return(response);
        }
 public bool HasLimits(MartianRobotUpdateable martianRobot)
 {
     return(martianRobot.XLimit > 0 && martianRobot.YLimit > 0);
 }