private List <Point> NeighborsKeysOnly(Point node, Dictionary <Point, char> map) { var neighbors = new List <Point>(); var potentialNeighbors = node.AdjacentInMainDirections(); foreach (var potentialNeighbor in potentialNeighbors) { if (map.TryGetValue(potentialNeighbor, out char mapItem)) { switch (mapItem.ToString()) { case "#": continue; case "@": case ".": case var _ when KeyPattern.IsMatch(mapItem.ToString()): case var x when DoorPattern.IsMatch(mapItem.ToString()): neighbors.Add(potentialNeighbor); break; default: throw new Exception("Unknown map item"); } } } return(neighbors); }
private static bool IsIntersection(Point aPoint, Dictionary <Point, int> map) { return(map[aPoint] == '#' && aPoint.AdjacentInMainDirections().All(p => map.ContainsKey(p) && map[p] == '#')); }
private static bool AdjacentToPortal(Point p, Dictionary <Point, char> mapData) { var neighbors = p.AdjacentInMainDirections(); return(neighbors.Any(n => mapData.TryGetValue(n, out char data) && char.IsLetter(data))); }