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(); }
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(); }
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); } }