public void RotateRoverBaseValidation(MarsRoverRequestModel model) { if (model == null) { throw new Exception("İstek boş bırakılamaz."); } if (model.Coordinates.XCoordinate == 0 || model.Coordinates.YCoordinate == 0) { throw new Exception("Roverların gidebileceği maksimum x ve y koordinat bilgilerini girmeniz gerekmektedir."); } if (model.Coordinates.XCoordinate < 0 || model.Coordinates.YCoordinate < 0) { throw new Exception("Maksimum sınır verileri 0'dan büyük olmalıdır."); } foreach (var item in model.RoverPositionAndCoordinates) { if (item.Coordinates.XCoordinate > model.Coordinates.XCoordinate || item.Coordinates.YCoordinate > model.Coordinates.YCoordinate) { throw new Exception(item.Coordinates.XCoordinate + item.Coordinates.YCoordinate + item.Direction + " koordinatları maksimum boyutları aştığından dolayı rover bilgileri olarak girilemez."); } } }
private List <RoverModel> GetRoverList(MarsRoverRequestModel model) { var roverList = new List <RoverModel>(); foreach (var roverItem in model.Rovers) { var plateau = _plateauService.DrawPlateau(model.Plateau); var rover = _roverService.SetRoverOnPlateau(model.Plateau, new DeploymentPointModel(roverItem.DeploymentPoint.Direction.ToString()) { X = roverItem.DeploymentPoint.X, Y = roverItem.DeploymentPoint.Y }); var movements = roverItem.Movement.ToString() .ToCharArray() .Select(x => Enum.Parse <MovementAbility>(x.ToString())) .ToList(); rover.Movement.MovementList = movements; roverList.Add(_roverService.CalculateRoverMovement(rover, plateau)); } return(roverList); }
public List <MarsRoverResponseModel> Post([FromBody] MarsRoverRequestModel model) { return(GetRoverList(model).Select(x => new MarsRoverResponseModel() { X = x.DeploymentPoint.X, Y = x.DeploymentPoint.Y, Direction = x.DeploymentPoint.Direction.ToString() }).ToList()); }
public List <MarsRoverPositionAndCoordinatesResponseModel> RotateRover(MarsRoverRequestModel model) { try { RotateRoverBaseValidation(model); var result = _marsRoverService.RotateRovers(model); return(result); } catch (Exception e) { Console.WriteLine(e); throw; } }
public List <MarsRoverPositionAndCoordinatesResponseModel> RotateRovers(MarsRoverRequestModel model) { var rovers = new List <MarsRoverPositionAndCoordinatesResponseModel>(); foreach (var item in model.RoverPositionAndCoordinates) { char[] instructionArray = item.Instruction.ToString().ToCharArray(); foreach (var instruction in instructionArray) { if (instruction.ToString() == "L" || instruction.ToString() == "R") { item.Direction = GetDirection(new DirectionModel { Direction = item.Direction, MoveChar = instruction }); } if (instruction.ToString() == "M") { item.Coordinates = SetPosition(new MoveModel { Position = item.Coordinates, Direction = item.Direction }); } } if (item.Coordinates.XCoordinate < 0 || item.Coordinates.XCoordinate > model.Coordinates.XCoordinate || item.Coordinates.YCoordinate < 0 || item.Coordinates.YCoordinate > model.Coordinates.YCoordinate) { throw new Exception("Verilen komutlar maksimum sınırları aşmıştır"); } var rover = new MarsRoverPositionAndCoordinatesResponseModel { Direction = item.Direction, Coordinates = item.Coordinates }; rovers.Add(rover); } return(rovers); }
public IActionResult Post([FromBody] MarsRoverRequestModel model) { var response = _marsRoverBusiness.RotateRover(model); return(Ok(response)); }