public void AddRoverToList(RoverDto roverDto) { var plateu = PlateuFactory.CreatePlateu(roverDto.Plateu.CoordinateX, roverDto.Plateu.CoordinateY); var rover = RoverFactory.CreateRover(roverDto.Id, roverDto.CoordinateX, roverDto.CoordinateY, roverDto.Direction, roverDto.Command, plateu); rovers.Add(rover); }
public string Movement(RoverDto rover, string command) { if (this.IsMoveAvailable(rover)) { for (int i = 0; i < command.Length; i++) { if (command[i].ToString() == "L") { rover.DirectionType = ((int)rover.DirectionType - 1) < (int)DirectionType.N ? DirectionType.W : (DirectionType)((int)rover.DirectionType - 1); } else if (command[i].ToString() == "R") { rover.DirectionType = ((int)rover.DirectionType + 1) > (int)DirectionType.W ? DirectionType.N : (DirectionType)((int)rover.DirectionType + 1); } else if (command[i].ToString() == "M") { switch (rover.DirectionType) { case DirectionType.N: rover.Coorditane.Y += 1; break; case DirectionType.E: rover.Coorditane.X += 1; break; case DirectionType.S: rover.Coorditane.Y -= 1; break; case DirectionType.W: rover.Coorditane.X -= 1; break; } } } return(rover.Coorditane.X + " " + rover.Coorditane.Y + " " + rover.DirectionType);; } else { return("Move dose not available!"); } }
static void Main(string[] args) { var plateau = new PlateauDto(); plateau.MinHeight = 0; plateau.MinWidth = 0; plateau.Width = 5; plateau.Height = 5; var operatingRover1 = new RoverDto() { Coorditane = new CoorditaneDto { X = 1, Y = 2, }, DirectionType = DirectionType.N, Plateau = plateau }; var operatingRover2 = new RoverDto() { Coorditane = new CoorditaneDto { X = 3, Y = 3, }, DirectionType = DirectionType.E, Plateau = plateau }; var roverBusiness = new RoverBusiness(); var response1 = roverBusiness.Movement(operatingRover1, "LMLMLMLMM"); var response2 = roverBusiness.Movement(operatingRover2, "MMRMMRMRRM"); Console.WriteLine("OUTPUT:"); Console.WriteLine(response1); Console.WriteLine(response2); }
public IRoverDto Create(IPlateauDto plateau, string roverPositionText) { if (plateau is null) { throw new ValidationException("Plateau is null. Please try again."); } if (roverPositionText is null) { throw new ValidationException("Position is null. Please try again."); } var roverMatch = Regex.Match(roverPositionText, RegexPatterns.RoverPosition, RegexOptions.Singleline); if (!roverMatch.Success) { throw new ValidationException($"{roverPositionText} is not matched."); } var rover = new RoverDto(); rover.Land(plateau, new Position(int.Parse(roverMatch.Groups[1].Value), int.Parse(roverMatch.Groups[2].Value), Directions.Items.FirstOrDefault(a => a.Key.Equals(roverMatch.Groups[3].Value.ToUpper())))); return(rover); }
public bool IsMoveAvailable(RoverDto rover) => rover.Plateau.MinWidth <= rover.Coorditane.X && rover.Coorditane.X <= rover.Plateau.Width && rover.Plateau.MinHeight <= rover.Coorditane.Y && rover.Coorditane.Y <= rover.Plateau.Height;