public static void Main(string[] args) { var roverService = new RoverService(new RoverParser(), new RoverManager()); string fileName = args.FirstOrDefault(); var fileContents = File.ReadAllLines(fileName); if (string.IsNullOrWhiteSpace(fileName)) { System.Console.Error.WriteLine("Please enter a file name."); } else { try { roverService.ExecuteInstructions(fileContents); var headingConverter = new HeadingConverter(); foreach (var rover in roverService.EnumerateRovers()) { System.Console.WriteLine(string.Format("Rover{0}:{1} {2} {3}", rover.Id, rover.Position.X, rover.Position.Z, headingConverter.ToChar(rover.Heading))); } } catch (Exception ex) { System.Console.Error.WriteLine(ex.Message); } } System.Console.Write("Please press any key..."); System.Console.ReadLine(); }
public Rover ParseLanding(string lineContents) { var result = Regex.Match(lineContents, @"^Rover(\d+)\sLanding:\s*(\d+)\s*(\d+)\s*([NSEW])\s*$", RegexOptions.IgnoreCase); if (result.Success) { var headingConverter = new HeadingConverter(); var heading = headingConverter.ToVector(result.Groups[4].Value[0]); if (heading == null) { return(null); } return(new Rover() { Id = Int32.Parse(result.Groups[1].Value), Position = new Vector() { X = Int32.Parse(result.Groups[2].Value), Z = Int32.Parse(result.Groups[3].Value) }, Heading = heading }); } else { return(null); } }
public void ParseLanding_ShouldParseValidCoordinates(string input, int id, int x, int y, char heading) { var parser = new RoverParser(); var headingConverter = new HeadingConverter(); var results = parser.ParseLanding(input); Assert.NotNull(results); Assert.NotNull(results.Position); Assert.Equal(id, results.Id); Assert.Equal(x, results.Position.X); Assert.Equal(y, results.Position.Z); Assert.Equal(heading, headingConverter.ToChar(results.Heading)); }