static void Main(string[] args) { var roverRequest = new RoverRequest(); var secondRoverRequest = new RoverRequest(); Console.WriteLine("Enter the top position : "); string[] topPosition = Console.ReadLine().Split(' '); Console.WriteLine("Enter the first rover's current position : "); string[] currentPositionFirstRover = Console.ReadLine().Split(' '); Console.WriteLine("Enter the first rover's directions: "); roverRequest.Direction = Console.ReadLine(); Console.WriteLine("Enter the second rover's current position : "); string[] currentPositionSecondRover = Console.ReadLine().Split(' '); Console.WriteLine("Enter the second rover's directions: "); secondRoverRequest.Direction = Console.ReadLine(); roverRequest.TopPositionX = Convert.ToInt32(topPosition[0]); roverRequest.TopPositionY = Convert.ToInt32(topPosition[1]); roverRequest.CurrentX = Convert.ToInt32(currentPositionFirstRover[0]); roverRequest.CurrentY = Convert.ToInt32(currentPositionFirstRover[1]); roverRequest.CurrentFacing = currentPositionFirstRover[2].Trim(); secondRoverRequest.TopPositionX = Convert.ToInt32(topPosition[0]); secondRoverRequest.TopPositionY = Convert.ToInt32(topPosition[1]); secondRoverRequest.CurrentX = Convert.ToInt32(currentPositionSecondRover[0]); secondRoverRequest.CurrentY = Convert.ToInt32(currentPositionSecondRover[1]); secondRoverRequest.CurrentFacing = currentPositionSecondRover[2].Trim(); Run(roverRequest, secondRoverRequest); Console.ReadLine(); }
public void ValidateModel(RoverRequest roverRequest) { Guard.ForLessThanOrEqualToZero(roverRequest.TopPositionX, nameof(roverRequest.TopPositionX)); Guard.ForLessThanOrEqualToZero(roverRequest.TopPositionY, nameof(roverRequest.TopPositionY)); Guard.ForLessThanOrEqualToZero(roverRequest.CurrentFacing, nameof(roverRequest.CurrentFacing)); Guard.ForNullOrWhitespace(roverRequest.Direction, nameof(roverRequest.Direction)); }
private ResponseModel LastStateOfRover(RoverRequest roverRequest, Position position) { var response = new ResponseModel(); string existFacing = roverRequest.CurrentFacing.ToUpper(); foreach (var direct in roverRequest.Direction.ToUpper().ToCharArray()) { if (direct.ToString() == "L" || direct.ToString() == "R") { var cardinalDirectionEnumId = EnumExtensions.GetValues <CardinalDirectionEnum>().FirstOrDefault(x => x.Label == existFacing)?.Id; var turnPositionEnumId = EnumExtensions.GetValues <TurnPositionEnum>().FirstOrDefault(x => x.Label == direct.ToString())?.Id; existFacing = _directionEnum.SetDirection((CardinalDirectionEnum)cardinalDirectionEnumId, (TurnPositionEnum)turnPositionEnumId); position.Face = existFacing; } if (direct.ToString() == "M") { response = Pointer.GetCurrentPosition(roverRequest.TopPositionX, roverRequest.TopPositionY, position, roverRequest.SecondRoverX, roverRequest.SecondRoverY); position = response.Position; if (response.IsError) { break; } } } return(response); }
public ResponseModel RoverMove(RoverRequest roverRequest) { ValidateModel(roverRequest); var position = new Position(); position.xCoordinate = roverRequest.CurrentX; position.yCoordinate = roverRequest.CurrentY; position.Face = roverRequest.CurrentFacing; return(LastStateOfRover(roverRequest, position)); }
public static void Run(RoverRequest roverRequest, RoverRequest secondRoverRequest) { var roverMovement = new RoverMovement(); var positionFirstRover = roverMovement.RoverMove(roverRequest); if (positionFirstRover.IsError) { Console.WriteLine(positionFirstRover.Exception.Message); } else { Console.WriteLine(positionFirstRover.Position.xCoordinate + " " + positionFirstRover.Position.yCoordinate + " " + positionFirstRover.Position.Face); secondRoverRequest.SecondRoverX = positionFirstRover.Position.xCoordinate; secondRoverRequest.SecondRoverY = positionFirstRover.Position.yCoordinate; var positionSecondRover = roverMovement.RoverMove(secondRoverRequest); Console.WriteLine(positionSecondRover.Position.xCoordinate + " " + positionSecondRover.Position.yCoordinate + " " + positionSecondRover.Position.Face); } }
public void SetUp() { _roverRequest = new RoverRequest(); _roverFacade = RoverFacade.GetInstance(); _squarerRequest = new RoverRequest { Square = new SquareModel { PositionX = 5, PositionY = 5 }, RoverModels = new List <RoverModel> { new RoverModel { StartPosition = new StartPosition { PositionX = 1, PositionY = 2, Compass = Compass.North }, CommandList = new List <Command> { (Command.L), (Command.M), (Command.L), (Command.M), (Command.L), (Command.M), (Command.L), (Command.M), (Command.M) } }, new RoverModel { StartPosition = new StartPosition { PositionX = 3, PositionY = 3, Compass = Compass.East }, CommandList = new List <Command> { (Command.M), (Command.M), (Command.R), (Command.M), (Command.M), (Command.R), (Command.M), (Command.R), (Command.R), (Command.M) } } } }; }
public string Move([FromBody()] RoverRequest _rover) { new SurfaceBuss().Create(mars); rover = _rover.Rover; if (mars.X == 0 && mars.Y == 0) { mars.X = 5; mars.Y = 5; } foreach (string axis in _rover.Axises) { Actions.Action action; Utility.Direction.selector.TryGetValue(axis, out action); if (action != null) { rover = action.Move(rover); } } return(rover.X + ", " + rover.Y + ", " + rover.Direction + " rover stoped"); }