Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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));
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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)
                        }
                    }
                }
            };
        }
Ejemplo n.º 7
0
        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");
        }