# Expanded version for better readability. # life = lambda do |grid, size| (0..size*size-1).map do |i| lambda do |neighbours| neighbours == 3 || ( grid[i] && neighbours == 2 )|| nil end.call ( [ grid[i-size-1], grid[i-size], grid[i-size+1], grid[i-1], grid[i+1], grid[i+size-1], grid[i+size], grid[i+size+1] ].compact.count ) end end