Ejemplo n.º 1
0
        private static HashSet <AoCPoint> FollowRoute(IEnumerable <char> directions, bool useRoboSanta)
        {
            var visitedHouses  = new HashSet <AoCPoint>();
            var directionQueue = new Queue <char>(directions);

            var santaPosition     = AoCPoint.Origin();
            var roboSantaPosition = AoCPoint.Origin();

            visitedHouses.Add(santaPosition);

            var roboSantaTurn = false;

            while (directionQueue.Any())
            {
                var d = directionQueue.Dequeue();

                if (useRoboSanta && roboSantaTurn)
                {
                    roboSantaPosition = VisitHouse(visitedHouses, roboSantaPosition, d);
                }
                else
                {
                    santaPosition = VisitHouse(visitedHouses, santaPosition, d);
                }
                roboSantaTurn = !roboSantaTurn;
            }

            return(visitedHouses);
        }
Ejemplo n.º 2
0
        private static AoCPoint VisitHouse(HashSet <AoCPoint> visited, AoCPoint santaLocation, char d)
        {
            var currentLocation = santaLocation.MoveTo(d.GetDirection());

            if (!visited.Contains(currentLocation))
            {
                visited.Add(currentLocation);
            }
            return(currentLocation);
        }
Ejemplo n.º 3
0
 public LightingInstruction(int ox, int oy, int ex, int ey, string change)
 {
     Origin = new AoCPoint(ox, oy);
     End    = new AoCPoint(ex, ey);
     Switch = Enum.Parse <Switch>(change, true);
 }