Пример #1
0
            public void Run2(int days = 10)
            {
                Run();

                // start to execute days of flipping
                for (int day = 1; day <= days; day++)
                {
                    // Any black tile with zero or more than 2 black tiles immediately adjacent to it is flipped to white.
                    // Any white tile with exactly 2 black tiles immediately adjacent to it is flipped to black.
                    foreach (var(ind, tile) in TilesVisited)
                    {
                        var adjacent      = AdjacentTiles(tile);
                        var blackAdjacent = adjacent.Where((item) => !item.White).Count();

                        if (tile.White && blackAdjacent == 2)
                        {
                            // exactly 2 black tiles, flip to black!
                            tile.FlipTo = false;
                        }
                        else if (!tile.White && (blackAdjacent == 0 || blackAdjacent > 2))
                        {
                            tile.FlipTo = true;
                        }
                    }

                    foreach (var(ind, tile) in NewTiles)
                    {
                        TilesVisited.Add(tile.Index, tile);

                        var adjacent      = AdjacentTiles(tile, false);
                        var blackAdjacent = adjacent.Where((item) => !item.White).Count();

                        if (tile.White && blackAdjacent == 2)
                        {
                            // exactly 2 black tiles, flip to black!
                            tile.FlipTo = false;
                        }
                        else if (!tile.White && (blackAdjacent == 0 || blackAdjacent > 2))
                        {
                            tile.FlipTo = true;
                        }
                    }

                    foreach (var(ind, tile) in TilesVisited)
                    {
                        tile.ExecuteFlip();
                    }

                    NewTiles = new Dictionary <string, Tile>();
                    var nr = CountBlackTiles();

                    // Console.WriteLine($"Day {day}: {nr}");
                }
            }