private int DoFlashes() { var hasFlashed = new HashSet <Grid2d.Cell>(); grid.ForEach(c => c.Value++); var flashers = grid.GetCells(c => c.Value > 9 && !hasFlashed.Contains(c)); while (flashers.Any()) { flashers.ForEach(c => { hasFlashed.Add(c); grid.GetNeighbors(c).ForEach(n => n.Value++); }); flashers = grid.GetCells(c => c.Value > 9 && !hasFlashed.Contains(c)); } hasFlashed.ForEach(c => c.Value = 0); return(hasFlashed.Count); }