private static void Main(string[] args) { try { IPlateau?plateau; var rovers = new List <IRover>(); Console.WriteLine(args[0]); using (var tr = args.Length <= 0 ? Console.In : new StreamReader(args[0])) { var parser = new Parser(tr); plateau = parser.ParsePlateau(); if (plateau == null) { throw new ArgumentException("Missing information about Mars plateau"); } IRover?rover; for (uint i = 0; (rover = parser.ParseRover(i)) != null; i++) { rovers.Add(rover); } } var h = new Houston(plateau, rovers); h.Control(new PrintReporter(Console.Out, Console.Error)); } catch (Exception e) { Console.Error.WriteLine($"Error: {e.Message}\n{e.StackTrace}"); Environment.Exit(1); } }
public void ProcessCommands(string commandString) { var commands = commandString.Trim().Split(new[] { Environment.NewLine }, StringSplitOptions.None); RobotAdmin robotAdmin = new RobotAdmin(plateau); foreach (var command in commands) { if (!string.IsNullOrEmpty(command.Trim())) { var commandtype = CommandMatcher.GetCommandType(command); if (commandtype == CommandType.PlateauCoordinates) { var upperBounds = Parser.ParsePlateau(command); plateau.SetUpperCoordinates(upperBounds); } if (commandtype == CommandType.RoverInitialCoordinates) { string directionName = ""; var coordinates = Parser.ParsePosition(command, out directionName); robotAdmin.AddRover(coordinates, directionName); } if (commandtype == CommandType.RoverMovement) { if (robotAdmin.CurrentRover != null) { List <ICommand> movementCommands = Parser.MaptoCommands(command); foreach (var movementCommand in movementCommands) { movementCommand.Invoke(robotAdmin.CurrentRover); } } else { throw new ArgumentException("Please provide the rover coordinates to deploy the rover"); } Console.WriteLine($"{robotAdmin.CurrentRover.ToString()}"); } } } }