The core of Conway’s Game of Life is the cell, which can either be live or dead. Or rather, a grid of such cells with unbounded size. The simulation is run in generations, similar to “ticks” in video games. The state of the simulation during a particular generation is derived from the state of the previous generation, following simple rules. If a dead cell is surrounded by exactly three live neighbors (out of 8 total), then it is born. If a live cell is surrounded by either two or three live neighbors, it survives. Otherwise, the cell dies. Using some simple notation, this rule is known as B3/S23. Despite these simple rules, very intricate patterns can be made.
So far, I’ve never created anything interesting in the basic rules describe above. There are many limitations to work around, since even though there’s lots of “parts” to build with, there’s no guarantee that the parts will fit together in any simple/convenient way. When building a computer, which involves many complex parts, the keys are regularity, predictability, controllability. It would be very convenient if there were a way to dictate exactly which cells are allowed to do what, and instead design the rules to fit your pattern instead of designing patterns based on the rule. Except… there is.
Enter the Metapixel
The OTCA metapixel is a large (2048×2048) construction which allows for the emulation of any “life-like” rules. That is, any rule of the form B[0-8]*/S[0-8]*. The most common use is emulation of B3/S23, which is meta-life.
The suggestion of using metapixels in the project originally came from the challenge author, although he did not specify anything more than that they may be useful. Several months ago (I don’t know the time scale exactly), I had a realization: the grid of metapixels can be programmed independently. This fact, which I verified using Golly, was big news. By having a grid of mostly background (B/S) cells, other cell types can be arranged form wires, much like how wireworld has copper wires on a black background.
Unfortunately, there’s no simple way to create an “electron” (a pulse along a wire) with only two types of cells (background and wire) and two states (live or dead). Wireworld uses a 3-state cell for its wire, which provides both a “head” and “tail” that gives the electron direction. For our project, we could either construct a complex spaceship to serve as our electron, or use an additional type of cell. I chose to use a third type of cell.
Below is an animation (my first, created in MS Paint), of an electron flowing in a wire and going around a corner. The grey cells are B/S, the blue cells are B1/S, and the green cells are B2/S. The live blue cell serves as the electron head, and the green live cells are the tails. Each cell, of course, represents a single metapixel, which is actually 2048×2048 real GoL cells. Each generation in this animation represents 35328 real GoL generations.
You can play with an electron in some wire with this Variations of Life simulation. An important thing to note is the speed of travel: one cell per generation (also known as c, the “speed of light” in CAs). Even though there appears to be a gap in the wire, the timing is correct: the number of generations matches the Manhattan distance (our preferred measure of distance, so that the time it takes for a signal to travel depends less on the exact path used).
More information on wires and other simple components will be in the next post.