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); }
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); }
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); }