Пример #1
0
        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);
        }
Пример #2
0
        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!");
            }
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
 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;