예제 #1
0
        private static IReadOnlySet <Point> FlipTiles(IReadOnlySet <Point> tiles)
        {
            var newTiles   = new HashSet <Point>();
            var neighbours = CalculateNeighbours(tiles);

            foreach (var tile in tiles)
            {
                var allNeighbours    = neighbours[tile];
                var activeNeighbours = allNeighbours.Intersect(tiles).Count();

                if (activeNeighbours != 0 && activeNeighbours <= 2)
                {
                    newTiles.Add(tile);
                }
            }

            foreach (var tile in neighbours.SelectMany(x => x.Value).Distinct().Except(tiles))
            {
                if (tiles.Count(tile.IsNeighbour) == 2)
                {
                    newTiles.Add(tile);
                }
            }

            return(newTiles);
        }