public int Evaluate(int iterations) { for (int iteration = 0; iteration < iterations; ++iteration) { ++Iterations; _grid.VisitMatrix((int x, int y, AutomataCell cell) => { int result = _rule.Evaluate(cell, _grid.CountNeighbors(x, y)); _grid.SetNextCell(x, y, new AutomataCell(cell.State, result)); }); // Swap matrices so that _matrix always shows the latest state _grid.SwapMatricies(); } return(Iterations); }