I hadn't seen anything on discourse about this so here is my take on Wireworld.
As the title says, Wireworld is a type of cellular automata. It resembles and can simulate some electronic (digital) circuits. 
A little reference
http://en.wikipedia.org/wiki/Wireworld
A working applet can be found at
http://budgethighvoltage.googlepages.com/wireworld.html
Also, for anyone interested; the code. All you need to make your own is to save a bitmap with your four favorite colors for space, wire, electron head, and electron tail. 
Quote: 
 
//Wireworld
//My preferred colors
int SPACE=0, EH=color(0,255,255), ET=color(0,0,255), WIRE=color(255,255,0);
//Open Paint (or other graphics program) and draw in the colors you like
//int SPACE=color(255,255,255), EH=color(255,0,0), ET=color(0,255,0), WIRE=color(0);
//int SPACE=color(255,255,255), EH=color(0,255,0), ET=color(255,0,0), WIRE=color(0);
int w=512, h=512;
int addtype=0;
int[] imgout = new int[w*h];
int[] whatitwas = new int[w*h];
//boolean running=true;
PImage org = new PImage(w,h);
void setup() {
  size(w,h);
  
  org = loadImage("reference.bmp");//it's 512x512 if you haven't guessed
  
  arraycopy(org.pixels, imgout);
  arraycopy(imgout, whatitwas);
  
  
  frameRate(30);
}
void mouseReleased() {
  int i=0;
  i = mouseY * w + mouseX;
  imgout[i] = addtype;
}
void keyReleased() {
  if (keyCode == '1') {
    addtype = SPACE;
    
  } else if (keyCode == '2') {
    addtype = EH;
    
  } else if (keyCode == '3') {
    addtype = ET;
    
  } else if (keyCode == '4') {
    addtype = WIRE;
    
  }
}
void draw() {
  
  //if (running) {
    
    int i=0;
    
    for (int x=1; x<w-1; x++) {
      for (int y=1; y<h-1; y++) {
        
        i = y * w + x;
        
        if (whatitwas[i] == EH) {
          imgout[i] = ET;
          
        } else if (whatitwas[i] == ET) {
          imgout[i] = WIRE;
          
        } else if (whatitwas[i] == WIRE) {
          
          int electcount=0;
          //I am sure there is a more efficient way to do this but...
          
          if (whatitwas[y * w + (x + 1)] == EH) electcount++;
          if (whatitwas[(y + 1) * w + (x + 1)] == EH) electcount++;
          if (whatitwas[(y + 1) * w + x] == EH) electcount++;
          if (whatitwas[(y - 1) * w + (x + 1)] == EH) electcount++;
          if (whatitwas[(y - 1) * w + x] == EH) electcount++;
          if (whatitwas[(y - 1) * w + (x - 1)] == EH) electcount++;
          if (whatitwas[y * w + (x - 1)] == EH) electcount++;  
          if (whatitwas[(y + 1) * w + (x - 1)] == EH) electcount++;
                 
          if ((electcount == 1) || (electcount == 2)) {
            imgout[i] = EH;
          }
            
        }
        
        
      }
    }
    
    if (mousePressed && (mouseButton == LEFT)) {
      
      i = mouseY * w + mouseX;
      imgout[i] = addtype;
    }
    
    
    arraycopy(imgout, whatitwas);
    
    loadPixels();
    
    arraycopy(imgout, pixels);
    
    updatePixels();
  
  //}
  
}