Elementary Cellular Automaton

If you've ever heard of Conway’s The Game of Life, you may already have an idea of what this is. If not, now worries, it’s not that crazy of a concept.

An automaton (plural: automata or automatons) is a self-operating machine, or a machine or control mechanism designed to automatically follow a predetermined sequence of operations, or respond to predetermined instructions.

Cells are very basic. They are black or white. Alive or dead. Binary.

The animation below, is a 1 dimensional world of cells. That one dimension is on the horizontal axis. Time is the vertical axis, moving from the top to the bottom.

The way life plays out in this world is absolutely declarative. The second line is derived from the first line, by a series of rules; the third from the second, and so on. There is no free will.

The rules are simple.

  1. Each "world" (or Automaton) starts with a single dark cell. I position it in the center.
  2. Each cell’s color, is decided by the 3 cells immediately above it
  3. The key to each world’s evolution is in the “rule”

Now let’s unpack what that means.

Each cell’s color, is decided by the 3 cells immediately above it, in the shape of a capital T. Those three "parents" form a 3 digit binary sequence. 0 is white and 1 is black. There are 8 possible combinations of white and black values in a string of length 3.

  1. 000
  2. 001
  3. 010
  4. 011
  5. 100
  6. 101
  7. 110
  8. 111

Each world has a "rule" that everything is based on numbering from 0 to 255. This page is setup to start with Rule 90. All numbers from 0 to 255 can be represented by an 8 digit binary sequence. In this case, 90 is represented as 1011010.

So a cell looks at its parents and uses their coloring as a look-up value against the main rule. If your parents are 101, you will select the 5th value from the right on the main rule’s binary value. If it is a 1, the cell is black. Otherwise, it is white.

Here are some links to other resources if you want to dig deeper into the subject.

Rule number from 0 to 255: