A generation of Life is one button. To make a QWOP out of it you have to split that button four ways so the player is working the machinery underneath the abstraction rather than pressing step — and the obvious splits all fail the same way.
Splitting the ruleset — Q turns on extra birth conditions, W removes survival conditions — makes the keys into rule-modifier switches. That is a rule editor, not a mechanism. And every attempt to give a key to survivals produces one key with nothing to do, because in Life survival is not an operation. It is what happens to a cell when nothing is done to it. There is no work behind that button.
The way out is to notice that what makes Life Life is not any of its four clauses. It is simultaneity. Every birth and death in a generation is computed from the same frozen snapshot and applied at once; evaluate them one at a time against a board that is already changing and you get a different automaton. So simultaneity is the thing worth a key, and the split is three marks and one commit:
| key | does | touches the board? |
|---|---|---|
| Q | mark every dead cell with exactly 3 live neighbours | no |
| W | mark every live cell with fewer than 2 | no |
| O | mark every live cell with more than 3 | no |
| P | apply every mark at once, wipe the ledger | yes |
Because marking never mutates anything, all three marks see the same unchanged board however you interleave them, and Q W O P is exactly one generation of B3/S23 — not an approximation of it. The selftest checks that cell for cell against an independent implementation across 600 random generations, checks that all six orderings of the marks agree, and checks that a glider displaces exactly (1,1) every four generations.
The fourth key is not a fourth rule clause. Three of the keys are the rule; the fourth is the clock. Which is also why the ledger is worth looking at: the coloured cells on screen are condemned but still alive, and the green pips are not alive yet. In ordinary Life there is no moment at which that state exists.
Order inside a generation is irrelevant. Which operators you include is everything.
| you press | you get |
|---|---|
| Q P | births with nothing dying — runaway growth |
| W O P | a filter, not an executioner — see below |
| Q W P | Life with no overcrowding — explosive |
| Q O P | Life with no loneliness — sparse and stringy |
| Q W O P | Conway, exactly |
That second row is a correction. It said guaranteed extinction until the selftest refused it: deaths-only settles on 13 cells and stays there. With no births the population is monotone and bounded, so it must reach a fixed point — and a fixed point is by definition a board where nothing gets marked, which is to say where every live cell has two or three neighbours. Deaths-only is a filter that extracts the S23 core of whatever you hand it. A block survives it forever, because each of its cells has exactly three neighbours. Extinction is what usually happens, not what is guaranteed, and on 20 random boards none of the fixed points were empty.
You are handed a soup that Conway kills, and the generation it dies at. Beat it. There are two ways to lose and the second one is the interesting one: extinction, and stasis — eight consecutive commits that change nothing. A board frozen into still lifes has a population and no life in it, so filling the grid and stopping is not a win. Skill is visible in the deviation readout: the fewer generations on which you departed from plain Conway, the better you played.
The hand-driven version is a minute's worth of game. The real question is what a program can do with the same four operators: can a controller that only chooses which of them to run each generation take a soup Conway extinguishes and drive it into proliferation instead?
It can, and cheaply. The controller here — mercy(low, drop),
the same function the experiment sweeps and this page animates — runs plain
Conway until the population falls below low, then suspends one or
both death operators until it recovers. It never adds a rule, never places a
cell, never touches the board. It only declines to enforce a clause, and only
when things are already desperate.
Swept over six soups Conway kills, 600 generations each:
| mercy | below | survived | final pop | activity | deviated on |
|---|---|---|---|---|---|
| lonely | 8 | 6/6 | 16 | 7.2 | 33% |
| lonely | 16 | 6/6 | 74 | 44.6 | 1% |
| lonely | 32 | 6/6 | 127 | 89.1 | 1% |
| crowded | 8 | 0/6 | 0 | 21.6 | 12% |
| crowded | 16 | 3/6 | 4 | 12.0 | 55% |
| crowded | 32 | 3/6 | 6 | 10.4 | 83% |
| both | 8 | 6/6 | 12 | 1.3 | 33% |
| both | 16 | 6/6 | 65 | 35.4 | 14% |
| both | 32 | 6/6 | 147 | 90.2 | 2% |
Rescuing every doomed soup costs one generation in a hundred. On the other ninety-nine the automaton is running unmodified Conway. That is the result worth having: not that you can keep a board alive by overriding it — anyone can, by never running a death operator — but that an intervention this thin is enough, if it is aimed correctly.
And it has to be aimed. The striking row is crowded: suspending overcrowding rescues nothing, and does it while intervening twelve times as often as the controller that rescues everything. More meddling, worse outcome. Dying soups are not dying of overcrowding — they are thinning out and fragmenting, and the clause that is killing them is loneliness. Mercy that is not aimed at the actual cause of death is not gentler, it is just noise, and it costs the automaton its ability to prune.
The floor of the trace shows an amber tick on every generation the controller deviated. A rescue that works looks almost empty down there. The ghost line is the same soup under plain Conway, with the generation it died at marked; the dashed line near the top is 70% saturation, the point at which “still alive” would stop meaning anything.
Six doomed soups is a small sample, chosen as the first six seeds under 400 that Conway extinguishes at this board size — not cherry-picked, but not a survey either. The world is a 64×48 torus; a closed world with a carrying capacity is the right shape for asking whether a population lives or dies, since on an unbounded plane “growth” can always be answered by running away. The activity and saturation gates exist because without them the experiment is trivially winnable, and I would rather say that than let the result look stronger than it is.
This page shares no physics with the rest of the surface — no cilia, no Pterosperma, nothing measured. It is here because it is the same four keys: /qwop/ and /graze/ put Q W O P on a real swimmer, this one puts them on a rule, /griddle/ puts them on a pancake, and /armline/ puts them on a six-axis robot arm.