When i found that thread, i was torn between impressed and slightly bummed, since i had also thought about constructing a Game of Life machine. And funnily, while thinking about the options, i had struck upon the very concept Sphalerite used - "counting" the number of active neighbours by calibrating individually-powered circuits to shut down when the load from switched connected gears goes past a crucial threshold. There have been a few simple approximations, too - graphical displays that just go through simple Life patterns without actually running the algorithm. Sphalerite's Game of Life project is one of the great feats of dwarfputing in my book.
Since i didn't see much point in building practically the same thing again, i went and incorporated the gear-resistor concept into my
binary multiplier. I've considered other concepts for the game of life, but the resistor is the most compact core of a life machine i can think of. Using a water counter would be the next best:
For each cell, have an array with eight tiles and eight pumps, a door in each tile. Each door is linked to a neighbouring cell: if that cell is "alive", the door's open, if it's "dead", the door's closed. Now pump water into the array, then shut it off. You'll have one full tile of water for each neighbouring living cell. Now you pump the water out of the cells, into a seven-tile "measuring channel" (requires a split set-up, because at least two pumps must pump into the same target tile); water in the measuring channel is now of the exact depth of the number of living neighbours the cell has. You only need to check for depths two and three, everything else results in a dead cell anyway, so you only need two measuring plates.
Obvious problems - if you end up with one-deep water in the channel, you need some extra work to "flush" it out - pumps won't pick it up, you have to add more water first. If the cell has eight neighbours, you'll end up with seven leftover units of water that'll stay in the lower array, because there'll be no space for them in the measuring channel.
The main problem would be that it'd be horrendously complicated to automate.
PS: no, wait: you'd use a measuring channel of _four_ tiles: if two neighbours are alive, water depth will be 3-4 (one plate measuring four would be enough), if three are alive, it'll be 5-6 (one plate measuring five); everything above would fill the array to capacity, with one living neighbour, it'd spread into 3x2 and 1x1, so only one unit would be left after pumping the water out.