예제 #1
0
        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();
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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));
        }