示例#1
0
        static void Main(string[] args)
        {
            Console.WriteLine("__Test Input:__");
            Console.WriteLine();
            Console.WriteLine("5 5");
            Console.WriteLine("1 2 N");
            Console.WriteLine("LMLMLMLMM");
            Console.WriteLine();
            Console.WriteLine("3 3 E");
            Console.WriteLine("MMRMMRMRRM");
            Console.WriteLine();
            //First rover
            Plateau plateauOne = new Plateau(new Position(5, 5));
            Rover   firstRover = new Rover(plateauOne, new Position(1, 2), Directions.N);

            firstRover.Process("LMLMLMLMM");

            //Second rover
            Plateau plateauTwo  = new Plateau(new Position(5, 5));
            Rover   secondRover = new Rover(plateauTwo, new Position(3, 3), Directions.E);

            secondRover.Process("MMRMMRMRRM");

            Console.WriteLine("__Expected Output:__");
            Console.WriteLine();
            Console.WriteLine(firstRover.ToString());
            Console.WriteLine(secondRover.ToString());
            Console.WriteLine();

            Console.ReadLine();
        }
示例#2
0
        static void Main()
        {
            var rover        = new Rover();
            var instructions = new List <string>();
            var commands     = new List <Func <bool> >();

            Console.WriteLine("Hello Mars! Provide 5 commands one by one. Choose from left/right or <x>m e.g. 50m.");

            // Capture 5 instructions
            for (var i = 0; i < 5; i++)
            {
                instructions.Add(Console.ReadLine());
            }

            // filter for invalid commands
            if (!instructions.All(instruction => !string.IsNullOrWhiteSpace(instruction) &&
                                  (instruction.Trim().ToLower().Equals("left") ||
                                   instruction.Trim().ToLower().Equals("right") ||
                                   instruction.Trim().ToLower().EndsWith('m') &&
                                   int.TryParse(instruction.Trim().Remove(instruction.Length - 1), out _))))
            {
                Console.WriteLine("Invalid command present.");
            }
            else
            {
                // Construct the command list
                foreach (var instruction in instructions)
                {
                    switch (instruction.ToLower())
                    {
                    case "left":
                        commands.Add(() => rover.TurnLeft());
                        break;

                    case "right":
                        commands.Add(() => rover.TurnRight());
                        break;

                    default:
                        if (instruction.Trim().ToLower().EndsWith('m') &&
                            int.TryParse(instruction.Trim().Remove(instruction.Length - 1), out var units))
                        {
                            var result = units;
                            commands.Add(() => rover.Proceed(result));
                        }
                        break;
                    }
                }

                if (!rover.AddCommands(commands))
                {
                    return;
                }

                Console.WriteLine($"Performing commands. Rover present at {rover.CurrentPosition} facing {rover.FacingDirection.ToString()}");

                // process command list
                rover.Process();
            }
        }
        public void RoverExceedingBoundaryLimitShouldThrowException()
        {
            // setup a tight boundary
            boundary.SetupProperty(i => i.X, 1);
            boundary.SetupProperty(i => i.Y, 1);

            initialPosition.SetupProperty(i => i.X, 1);
            initialPosition.SetupProperty(i => i.Y, 1);
            initialPosition.SetupProperty(i => i.Orientation, Orientations.N);

            // move the rover past the grid boundary
            command = "M";

            delinquentRover = new Rover(initialPosition.Object, command, boundary.Object);
            delinquentRover.Process();
        }
        public void RoverExceedingBoundaryOriginShouldThrowException()
        {
            // setup a tight boundary
            boundary.SetupProperty(i => i.X, 1);
            boundary.SetupProperty(i => i.Y, 1);

            initialPosition.SetupProperty(i => i.X, 0);
            initialPosition.SetupProperty(i => i.Y, 0);
            initialPosition.SetupProperty(i => i.Orientation, Orientations.W);

            // move the before the origin
            command = "M";

            delinquentRover = new Rover(initialPosition.Object, command, boundary.Object);
            delinquentRover.Process();
        }
示例#5
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                int            X             = 0;
                int            Y             = 0;
                string         direction     = "N";
                RoverDirection rd            = RoverDirection.N;
                Position       roverPosition = new Position(X, Y);
                Plateau        marsPlateau   = new Plateau(new Position(X, Y));
                int            platSizeW     = 1;
                int            platSizeL     = 1;
                if (Request["txtPlateauDimension"] != null)
                {
                    if (Request["txtPlateauDimension"] != "")
                    {
                        string   initSize  = Request["txtPlateauDimension"];
                        string[] sizeArray = initSize.Split(' ');
                        if (sizeArray.Length == 2)
                        {
                            int.TryParse(sizeArray[0], out platSizeW);
                            int.TryParse(sizeArray[1], out platSizeL);
                            marsPlateau.PlateauPosition.X = platSizeW;
                            marsPlateau.PlateauPosition.Y = platSizeL;
                        }
                    }
                }
                if (Request["txtInitRover"] != null)
                {
                    if (Request["txtInitRover"] != "")
                    {
                        string   initPos  = Request["txtInitRover"];
                        string[] posArray = initPos.Split(' ');
                        if (posArray.Length == 3)
                        {
                            int.TryParse(posArray[0], out X);
                            int.TryParse(posArray[1], out Y);
                            roverPosition.X = X;
                            roverPosition.Y = Y;
                            switch (posArray[2])
                            {
                            case "N":
                                rd = RoverDirection.N;
                                break;

                            case "E":
                                rd = RoverDirection.E;
                                break;

                            case "S":
                                rd = RoverDirection.S;
                                break;

                            case "W":
                                rd = RoverDirection.W;
                                break;
                            }
                        }
                    }
                }
                Rover  rover  = new Rover(roverPosition, rd, marsPlateau);
                string retval = rover.Process(Request["txtCommands"]);
                Response.Write(retval);
            }
        }