Ejemplo n.º 1
0
 private bool MoveCheck(PlateauModel plateau, RoverModel rover)
 {
     return((rover.XCoord >= 0) &&
            (rover.XCoord <= plateau.Width) &&
            (rover.YCoord >= 0) &&
            (rover.YCoord <= plateau.Height));
 }
Ejemplo n.º 2
0
        public void IsTurnedTest()
        {
            RoverModel rover = null;

            rover = new AlphaRover();

            int roverOne = rover.AddRover(101, 2, 3, 'e');
            int areaOne  = rover.AddArea(102, 0, 0, 5, 5);

            int roverFromNorth = rover.AddRover(102, 4, 4, 'N');

            int roverTrunFromWest = rover.AddRover(103, 5, 5, 'W');

            int areaIntoRover = rover.AddRoverIntoArea(roverOne, areaOne);


            bool isTurneLeft             = rover.IsTurned(rover.GetRover(roverOne), 'L');
            bool isAnyUnexpectedChar     = rover.IsTurned(rover.GetRover(roverOne), 'M');
            bool isTurneRight            = rover.IsTurned(rover.GetRover(roverOne), 'R');
            bool isTurnedFromNorth       = rover.IsTurned(rover.GetRover(roverFromNorth), 'l');
            bool isContainAnySpecialChar = rover.IsTurned(rover.GetRover(roverFromNorth), ',');
            bool isContainAnyNumber      = rover.IsTurned(rover.GetRover(roverFromNorth), '1');
            bool isTurnedFromWest        = rover.IsTurned(rover.GetRover(roverTrunFromWest), 'r');

            Assert.IsTrue(isTurneLeft);
            Assert.IsTrue(isTurneRight);
            Assert.IsTrue(isTurnedFromNorth);
            Assert.IsTrue(isTurnedFromWest);
            Assert.IsFalse(isAnyUnexpectedChar);
            Assert.IsFalse(isContainAnySpecialChar);
            Assert.IsFalse(isContainAnyNumber);
        }
Ejemplo n.º 3
0
        public void RoverModelTest_CalculateNewPositions_Errors()
        {
            var rover = new RoverModel(Container);

            rover.StartRover(5, 5, "", "");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(5, 5, " - -", "-('");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(5, 5, "1 1", "MMRM");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(5, 5, "1 1 W", "MMRM");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(5, 5, "1   ", "M");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(0, 0, "1 1 S", "M");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(0, 0, "1 1 S", "M---");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover(0, 0, "1 1111111( S", "M---");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.StartRover('r', 'r', "1 1 W", "MMRM");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.Dispose();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// İstenilen yönüne göre hareket eylemine yönlendirir.
        /// </summary>
        /// <param name="rover"></param>
        /// <param name="plateau"></param>
        /// <returns></returns>
        private RoverModel Move(RoverModel rover, PlateauModel plateau)
        {
            foreach (var movingDirection in rover.Movement.MovementList)
            {
                switch (movingDirection)
                {
                case MovementAbility.L:
                    MoveLeft(rover);
                    break;

                case MovementAbility.R:
                    MoveRight(rover);
                    break;

                case MovementAbility.M:
                    MoveStraight(rover, plateau);
                    break;

                default:
                    throw new InvalidMovementAbilityParamException("Invalid moving key for rover");
                }
            }

            return(rover);
        }
Ejemplo n.º 5
0
 //Rover in the plateau checker
 private static bool CheckRoverPosition(RoverModel rover)
 {
     return(rover.Position.PositionX <= rover.Plateau.SizeOfX &&
            rover.Position.PositionX >= 0 &&
            rover.Position.PositionY <= rover.Plateau.SizeOfY &&
            rover.Position.PositionY >= 0);
 }
Ejemplo n.º 6
0
        public void PrepareRover(RoverModel model)
        {
            if (model.ErrorTracer == null)
            {
                _rover           = Rover.CreateRover(this);
                _rover.X         = model.X;
                _rover.Y         = model.Y;
                _rover.Direction = EnumConvertor.ConvertCharToDirection(model);
                _rover.Plateau   = _plateaus;

                if (model.X < 0 || model.X < 0)
                {
                    _rover.ErrorMessage = MessageConstant.RoverPlateauCoordinateFail;
                }


                if (model.Plateau.UpperRight < model.X || model.Plateau.LowerLeft < model.X)
                {
                    _rover.ErrorMessage = MessageConstant.RoverPlateauCoordinateFail;
                }

                if (model.Plateau.UpperRight < model.Y || model.Plateau.LowerLeft < model.Y)
                {
                    _rover.ErrorMessage = MessageConstant.RoverPlateauCoordinateFail;
                }
            }
        }
Ejemplo n.º 7
0
        private static void TurnLeft(RoverModel roverModel)
        {
            LinkedListNode <string> currentIndex = directions.Find(roverModel.RoverD);
            LinkedListNode <string> newDirection = currentIndex.Next ?? currentIndex.List.First;

            roverModel.RoverD = newDirection.Value;
        }
Ejemplo n.º 8
0
        public RoverModel RoverCurrentPosition(string roverid)
        {
            char dir = Char.MinValue;

            if (_facing == N)
            {
                dir = 'N';
            }
            else if (_facing == E)
            {
                dir = 'E';
            }
            else if (_facing == S)
            {
                dir = 'S';
            }
            else if (_facing == W)
            {
                dir = 'W';
            }

            RoverModel roverModel = new RoverModel
            {
                CurrentDirection = dir.ToString(),
                Id       = roverid,
                CurrentX = _x,
                CurrentY = _y
            };

            return(roverModel);
        }
Ejemplo n.º 9
0
        public RoverModel UpdateRover(RoverModel roverModel)
        {
            //UpdateRover
            var getRover = _roverRepository.UpdateRoverInfo(roverModel);

            return(getRover);
        }
Ejemplo n.º 10
0
        public IHttpActionResult Post([FromBody] RoverDTO dto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // convert dto to model
            var comps = new List <RoverModel.Coordinate>();

            foreach (string coord in dto.Components)
            {
                comps.Add(RoverModel.ToCoordinate(coord));
            }

            var model = new RoverModel()
            {
                GridSize      = Convert.ToInt32(dto.GridSize),
                RoverPosition = RoverModel.ToCoordinate(dto.RoverPosition),
                Components    = comps
            };
            // end convert to model


            var roverMovements = RoverService.ProcessRover(model);

            return(Ok(roverMovements));
        }
Ejemplo n.º 11
0
        public static Compass ConvertCharToDirection(RoverModel model)
        {
            Compass direction = Compass.North;

            switch (Char.ToUpper(model.Direction))
            {
            case 'N':
                direction = Compass.North;
                break;

            case 'E':
                direction = Compass.East;
                break;

            case 'W':
                direction = Compass.West;
                break;

            case 'S':
                direction = Compass.South;
                break;

            default:
                model.ErrorTracer = MessageConstant.WrongInput;
                break;
            }

            return(direction);
        }
Ejemplo n.º 12
0
 public IActionResult Post(RoverModel model)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     if (model.RoverId <= 0)
     {
         return(BadRequest("Id should be a positive integer value."));
     }
     try
     {
         var rover = RoverFactory.Create(model.RoverId, model.RoverName, 0, 0, Direction.N);
         return(Ok(new { RoverId = rover.Id, RoverName = rover.Name }));
     }
     catch (System.Exception ex)
     {
         if (ex.Message == "EXISTS")
         {
             return(Conflict(new ApiResponse
             {
                 Status = 409,
                 Message = "Rover already exists, Cannot be  created"
             }));
         }
         else
         {
             return(StatusCode(500));
         }
     }
 }
Ejemplo n.º 13
0
 public IActionResult Post(RoverModel model)
 {
     if (!ModelState.IsValid)
     {
         return(BadRequest(ModelState));
     }
     if (model.RoverId <= 0)
     {
         return(BadRequest(Messages.InvalidId));
     }
     try
     {
         var rover = RoverFactory.Create(model.RoverId, model.RoverName, 0, 0, Direction.N);
         return(Ok(new { RoverId = rover.Id, RoverName = rover.Name }));
     }
     catch (System.Exception ex)
     {
         if (ex.Message == "EXISTS")
         {
             return(Conflict(new ApiResponse
             {
                 Status = 409,
                 Message = Messages.RoverAlreadyExist
             }));
         }
         else
         {
             return(StatusCode(500));
         }
     }
 }
Ejemplo n.º 14
0
        public bool Move(PlateauModel plateau, RoverModel rover)
        {
            if (!CanItMove(plateau, rover))
            {
                return(false);
            }

            switch (rover.Direction)
            {
            case DirectionEnum.N:
                rover.CurrentYCoordinate += 1;
                break;

            case DirectionEnum.E:
                rover.CurrentXCoordinate += 1;
                break;

            case DirectionEnum.S:
                rover.CurrentYCoordinate -= 1;
                break;

            case DirectionEnum.W:
                rover.CurrentXCoordinate -= 1;
                break;
            }

            return(true);
        }
Ejemplo n.º 15
0
        public void RoverModelTest_CalculateNewPositions()
        {
            var rover = new RoverModel(Container);

            rover.StartRover(5, 5, "1 1 N", "MMRM");
            Assert.AreEqual("2 3 E", rover.CalculateNewPosition());

            rover.StartRover(5, 5, "3 5 S", "M");
            Assert.AreEqual("3 4 S", rover.CalculateNewPosition());

            // keep the same direction as previous when error occurs
            // 35S is a wrong position
            rover.StartRover(5, 5, "35S", "M");
            Assert.AreEqual("3 4 S", rover.CalculateNewPosition());

            rover.Dispose();

            rover.StartRover(54444444, 123456445, "54443444 123456425 S", "MML");
            Assert.AreEqual("54443444 123456423 E", rover.CalculateNewPosition());

            rover.Dispose();

            rover.StartRover(5, 5, "35S", "M");
            Assert.AreEqual("", rover.CalculateNewPosition());

            rover.Dispose();
        }
Ejemplo n.º 16
0
        /// <summary>
        /// A set of numbered components are placed on a grid, a rover is placed on a random grid
        /// coordinate and has to pick up the numbered components in ascending order(starting with 1).
        /// Once the last component has been picked up the solution is complete.
        /// </summary>
        /// <returns>Returns a list of movements performed by the rover.</returns>
        public IEnumerable <string> ProcessRover(RoverModel model)
        {
            var movementHistory = new List <string>();

            foreach (RoverModel.Coordinate componentPosition in model.Components)
            {
                var availableCoords = GetAllCoords(model.GridSize, model.RoverPosition);

                while (!model.RoverPosition.Equals(componentPosition)) // seek until landing on component
                {
                    RoverModel.Coordinate nextMove = GetNextMove(model.RoverPosition, availableCoords, model.GridSize);

                    movementHistory.Add(SetDirection(nextMove, model.RoverPosition));

                    if (availableCoords.Contains(nextMove))
                    {
                        availableCoords.Remove(nextMove);
                    }

                    model.RoverPosition = nextMove;
                }

                // landed on component so add pickup to movement
                movementHistory.Add("P");
            }

            return(movementHistory);
        }
Ejemplo n.º 17
0
        //Move 1 unit to the selected direction
        private static RoverModel MoveRover(RoverModel rover)
        {
            var cloneRover = rover;

            switch (rover.Position.Direction)
            {
            case DirectionEnum.N:
                rover.Position.PositionY++;
                break;

            case DirectionEnum.S:
                rover.Position.PositionY--;
                break;

            case DirectionEnum.W:
                rover.Position.PositionX--;
                break;

            case DirectionEnum.E:
                rover.Position.PositionX++;
                break;

            default:
                throw new InvalidOperationException();
            }

            if (!CheckRoverPosition(rover))
            {
                return(cloneRover);
            }

            return(rover);
        }
Ejemplo n.º 18
0
        private static void TurnRight(RoverModel roverModel)
        {
            LinkedListNode <string> currentIndex = directions.Find(roverModel.RoverD);
            LinkedListNode <string> newDirection = currentIndex.Previous ?? currentIndex.List.Last;

            roverModel.RoverD = newDirection.Value;
        }
Ejemplo n.º 19
0
 public RoverViewModel(MainWindowViewModel mw)
 {
     Model = new RoverModel
     {
         roverName = "Phoenix I"
     };
     mainWindow = mw;
 }
Ejemplo n.º 20
0
 /// <summary>
 /// Gezicinin plato üzerinde hareketini hesaplar.
 /// </summary>
 /// <param name="rover"></param>
 /// <param name="plateau"></param>
 /// <returns></returns>
 public RoverModel CalculateRoverMovement(RoverModel rover, PlateauModel plateau)
 {
     if (rover == null)
     {
         throw new BadRequestException("Please check your requested Rover Model.");
     }
     return(Move(rover, plateau));
 }
Ejemplo n.º 21
0
 public void MoveRover(RoverModel model)
 {
     if (model.ErrorTracer == null)
     {
         var result = _rover.Move(model.Movement.ToUpper());
         _rover.ErrorMessage = !result ? MessageConstant.MovementInstructionFail : null;
     }
 }
Ejemplo n.º 22
0
 public string CalculatePosition(PlateauModel plateau, RoverModel rover, string order)
 {
     for (int i = 0; i < order.Length; i++)
     {
         rover = Execute(plateau, rover, order[i]);
     }
     return($"{rover.XCoord} {rover.YCoord} {rover.Direction}");
 }
Ejemplo n.º 23
0
		public RoverViewModel(MainWindowViewModel mw)
		{
			Model = new RoverModel
			{
				roverName = "Phoenix I"
			};
			mainWindow = mw;
		}
Ejemplo n.º 24
0
        static void Main(string[] args)
        {
            Console.WriteLine("Mission started.");

            // create service collection
            RegisterServices();

            var roverService = _serviceProvider.GetService <IRoverService>();

            bool IsContinue;

            Console.WriteLine("Please enter the upper-right coordinates of the plateau.(Format=X Y)");
            Console.WriteLine("Info: Consider that the lower-left coordinates are assumed to be 0,0");
            string upperRightCoordinates = Console.ReadLine();
            var    _plateauCoordinates   = upperRightCoordinates.Split(" ");

            do
            {
                Console.WriteLine("Please enter the current coordinates and direction(N/E/S/W). (Format=X Y D)");
                string currentCoordinates  = Console.ReadLine();
                var    _currentCoordinates = currentCoordinates.Split(" ");
                Enum.TryParse(_currentCoordinates[2], out DirectionEnum _direction);

                Console.WriteLine("Please enter the your intsructions. (L=left, R=right, M=Move)");
                string command = Console.ReadLine();

                var plateau = new PlateauModel(Convert.ToInt32(_plateauCoordinates[0]), Convert.ToInt32(_plateauCoordinates[1]));
                var rover   = new RoverModel(Convert.ToInt32(_currentCoordinates[0]), Convert.ToInt32(_currentCoordinates[1]), _direction, command);

                var response = roverService.Run(plateau, rover);

                if (!response.HasError)
                {
                    Console.WriteLine($"Current location info: {response.Data.CurrentXCoordinate} {response.Data.CurrentYCoordinate} {response.Data.Direction}");

                    Console.WriteLine("Do you want to move new rover? (Y/N)");
                    string moveNewRover = Console.ReadLine();

                    if (moveNewRover.ToUpper() == "Y")
                    {
                        IsContinue = true;
                    }
                    else
                    {
                        IsContinue = false;
                    }
                }
                else
                {
                    Console.WriteLine($"{response.Errors}");
                    IsContinue = false;
                }
            } while (IsContinue);

            Console.WriteLine("Mission completed.");
            DisposeServices();
        }
Ejemplo n.º 25
0
        public IActionResult Put(int roverId, RoverModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var rover = RoverFactory.Update(roverId, model.RoverName);

            return(Ok(new { RoverId = rover.Id, RoverName = rover.Name }));
        }
        public RoverModel UpdateRoverInfo(RoverModel roverModel)
        {
            using (var db = new LiteDatabase(Connection))
            {
                var collection = db.GetCollection <RoverModel>("roverModel");
                collection.Update(roverModel);
                var resultModel = collection.Find(x => x.Id == roverModel.Id).FirstOrDefault();

                return(resultModel);
            }
        }
Ejemplo n.º 27
0
        public RoverViewModel Move([FromBody] RoverModel model)
        {
            if (_roverCaching.IsItemExists(model.Id))
            {
                var result = _rover.Process(Get(model.Id), model.MovementInstruction);
                _roverCaching.Remove(model.Id);
                _roverCaching.SetItem(model.Id, result);
            }

            return(Get(model.Id));
        }
Ejemplo n.º 28
0
        public void RoverFinalPosition_ShouldReturnExpectedValue_WhenInstructionsAreSet()
        {
            PlateauModel plateau            = new PlateauModel(5, 5);
            RoverModel   rover              = new RoverModel(1, 2, "N");
            string       order              = "LMLMLMLMM";
            var          roverActionService = new RoverActionService();

            var actual = roverActionService.CalculatePosition(plateau, rover, order);

            Assert.Equal("1 3 N", actual);
        }
Ejemplo n.º 29
0
 /// <summary>
 /// Sola hareket eylemini sağlar.
 /// </summary>
 /// <param name="rover"></param>
 private void MoveLeft(RoverModel rover)
 {
     rover.DeploymentPoint.Direction = rover.DeploymentPoint.Direction switch
     {
         Direction.N => Direction.W,
         Direction.W => Direction.S,
         Direction.S => Direction.E,
         Direction.E => Direction.N,
         _ => throw new ArgumentOutOfRangeException(),
     };
 }
Ejemplo n.º 30
0
        public IActionResult Rename([FromBody] RoverModel model)
        {
            if (_roverCaching.IsItemExists(model.Id))
            {
                var roverViewModel = Get(model.Id);
                roverViewModel.Name = model.Name;
                _roverCaching.Remove(model.Id);
                _roverCaching.SetItem(model.Id, roverViewModel);
            }

            return(NoContent());
        }
Ejemplo n.º 31
0
        private static void GetInputForPath(RoverModel rover, IManager manager)
        {
            do
            {
                manager.MoveRover(rover);

                if (rover.ErrorTracer != null)
                {
                    Console.WriteLine(rover.ErrorTracer);
                }
            } while (rover.ErrorTracer != null);
        }