Example #1
0
        public int FirstVisitedDistance(string input)
        {
            HashSet <Location> visits = new HashSet <Location>();

            var instructions = input.Split(',')
                               .Select(x =>
            {
                var instruction = x.Trim();
                return(new Vector
                {
                    Direction = instruction.Substring(0, 1) == "R" ? 90 : -90,
                    Magnitude = Convert.ToInt32(instruction.Substring(1))
                });
            });

            CurrentCompassBearing = CompassBearing.North;
            CurrentLocation       = new Location(0, 0);

            foreach (var vector in instructions)
            {
                SetNewDirection(vector.Direction);
                var found = UpdateLocationWithTracking(visits, vector.Magnitude);
                if (found)
                {
                    break;
                }
            }

            return(Math.Abs(CurrentLocation.X) + Math.Abs(CurrentLocation.Y));
        }
Example #2
0
        public void SetNewDirection(int turn)
        {
            var newBearing = (Convert.ToInt32(CurrentCompassBearing) + turn);

            if (newBearing < 0)
            {
                newBearing += 360;
            }
            CurrentCompassBearing = (CompassBearing)(newBearing % 360);
        }
Example #3
0
        private string GetNextPath(CompassBearing bearing)
        {
            switch (bearing)
            {
            case CompassBearing.North: return("U");

            case CompassBearing.East: return("R");

            case CompassBearing.South: return("D");

            case CompassBearing.West: return("L");
            }
            throw new Exception("Invalid enum passed in");
        }
Example #4
0
        public Day17MazeState(Day17MazeState state, CompassBearing direction)
        {
            Path     = state.Path;
            Location = new Location(state.Location.X, state.Location.Y);

            Path = state.Path + GetNextPath(direction);

            if (direction == CompassBearing.North)
            {
                Location.Y--;
            }
            else if (direction == CompassBearing.East)
            {
                Location.X++;
            }
            else if (direction == CompassBearing.South)
            {
                Location.Y++;
            }
            else if (direction == CompassBearing.West)
            {
                Location.X--;
            }
        }