
from numarray import *
import pylab, random

step = 40
size = step * 30

pylab.figure(1, (16,128))

for rule in xrange(0,256):
  print rule

  data = zeros(size)
  #data[step-1] = 1
  for i in xrange(size): data[i] = random.choice([0,1])
  
  for i in xrange(step, size):
        index = data[i-1] + 2*data[i-step] + 4*data[i-step+1]
        data[i] = (rule>>index)&1
        
  print data
  
  pylab.subplot(64,4,1+rule)
  
  minx, maxx, miny, maxy = 0,0,0,0
  for i in xrange(0,size):
      x = (i % step) + i/step*0.5
      y = -(i/step*1.5)
      
      minx = min(x,minx)
      maxx = max(x,maxx)
      miny = min(y,miny)
      maxy = max(y,maxy)
      
      if data[i]:
          pylab.fill([x,x+0.5,x+1,x+1,x+0.5,x], [y,y-0.5,y,y+1,y+1.5,y+1], 'k', lw=0)
  
  pylab.xticks([])
  pylab.yticks([])
  pylab.xlim(minx-3,maxx+3)
  pylab.ylim(miny-3,maxy+3)
  pylab.title(repr(rule))
          
pylab.savefig("/tmp/image.png", dpi=80)
