Finally its right. It seems so obvious now. I thought I could
take this or that shortcut without thinking it thru.
I must be more methodical.
I couldn't quit till I did it.

Now to do some more interesting patterns.

Here it is if you are interested.

===========
# Size of grid;

nn = 8
nnm  = nn - 1
nmm = nnm - 1

# Create and Initialize Grid a

a = Array.new
b = Array.new
0.upto( nnm ) do |i|
  a[i] = Array.new( nn )
  b[i] = Array.new( nn )
  a[i] = [0,0,0,0,0,0,0,0]
  b[i] = [0,0,0,0,0,0,0,0]
end


# Initial state
a[3][2] = 1
a[3][3] = 1
a[3][4] = 1
a[3][5] = 1


0.upto( nnm ) do |i|
  print a[i]
  puts ""
end
puts ""

# Apply rules to set a[i][j] = 0 or 1
# What to do at edges?
# If a cell is off and has 3 living neighbors (out of 8), it will become alive
# in the next generation.
# If a cell is on and has 2 or 3 living neighbors, it survives; otherwise, it
# dies in the next generation. Otherwise no change.

1.upto( 6 ) do |k|
1.upto( nmm ) do |i|
1.upto( nmm ) do |j|

  
# count n = number of black cells around [i][j]
 
n =  a[i-1][j-1] + a[i-1][j] + a[i-1][j+1] + a[i][j-1] +  a[i][j+1] + \
     a[i+1][j-1] + a[i+1][j] + a[i+1][j+1]
     
    if (a[i][j] == 0 and n == 3) then b[i][j] = 1
    elsif (a[i][j] == 1 && (n != 2 and n != 3)) then b[i][j] = 0
    elsif (a[i][j] == 0 and n != 3) then b[i][j] = 0
    elsif (a[i][j] == 1 && (n == 2 or n == 3)) then b[i][j] = 1
    end
 end
 end

0.upto( nnm ) do |i|
0.upto( nnm ) do |j|
  a[i][j] = b[i][j]
end
print a[i]
puts ""
end
puts ""

0.upto( nnm ) do |i|
0.upto( nnm ) do |j|
          if (a[i][j] == 0) then print ' '
          else print 'X'
          end
end
puts ""
end
end



=====
Sylvan Jacques ; (Van)vanjac12 / yahoo.com