Example #1
0
        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);
        }
Example #2
0
 private static bool IsIntersection(Point aPoint, Dictionary <Point, int> map)
 {
     return(map[aPoint] == '#' && aPoint.AdjacentInMainDirections().All(p => map.ContainsKey(p) && map[p] == '#'));
 }
Example #3
0
        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)));
        }