Pattern · a combinatorial game · show the check
Conway's Soldiers
Fill the world below a line with soldiers and jump them, checkers-style. You can push one soldier one row past the line. Two rows. Three, four. The fifth row is impossible — and not "hard," not "nobody's managed it." Provably out of reach, for any number of soldiers in any finite number of moves. Here is the board, and here is the reason, running live as you play.
σⁿ = σⁿ⁺¹ + σⁿ⁺², the finite truncations
climbing toward but never reaching 1, and the whole infinite army summing to exactly 1.
Every number is recomputed live from σ; the percussion is the solution itself, accented at each new row reached.
Recomputed offline by research/conways-soldiers/verify.py (19/19).
The film still shows the old rule, that only a jump straight at the target holds the weight and a
sideways jump loses some; in fact any jump that brings a soldier closer to the target holds it,
sideways jumps in toward the target's column included. Its caption that every jump was
validated by verify.py is also out of date: verify.py replays its own solutions on smaller
armies, not the one shown here. And where it says row five is out of reach for any number of
moves, the proof covers any finite number of moves.
The rules are the ones you already know from peg solitaire. The board is the infinite grid. Every cell on or below a horizontal line starts with a soldier; above it is empty enemy ground. A move is a single orthogonal jump: a soldier hops over an adjacent soldier into the empty cell just beyond, and the jumped soldier is removed. The only question is: how far above the line can you get a single soldier?
Pick a target row and try. Tap a soldier to select it; its legal jumps light up; tap one to take it. The numbers below the board are not decoration — they are the whole proof.
Total army weight · w = Σ σ|x|+|row−y|, σ = (√5−1)/2 ≈ 0.6180
Slide the target down to row 1, 2, 3, or 4 and press Solve it: the board plays out a real, legal sequence of jumps and a soldier lands on the row. Slide it to row 5 and Solve it goes dark — there is nothing to play, because nothing reaches it. The bar tells you why before you make a single move: against a row-5 target this finite army already weighs 0.982, and the green line you must cross is 1.000.
Why the weight can only fall
Put the target cell at distance zero and give every cell a weight of σ raised to its taxicab distance (steps along the grid) from the target, where σ = (√5−1)/2 ≈ 0.618 is the positive root of x² + x − 1 = 0 — that is, σ + σ² = 1. It is exactly 1/φ, the reciprocal of the golden ratio. That one algebraic fact is the whole engine:
| the move | weights before → after | change |
|---|---|---|
| jump toward the target (lands two steps closer, e.g. up toward it, or sideways in toward its column) | σn+1 + σn+2 → σn | 0, exactly conserved |
| jump away from the target | σn + σn+1 → σn+2 | −2σ·σn < 0 |
| jump across the target's column or row (lands at the same distance) | σn + σn+1 → σn+1 | −σn < 0 |
The conservation line is the magic: σn+1 + σn+2 = σn is just σ + σ² = 1 in disguise. So the best move you can ever make (a jump toward the target) holds the total weight fixed, and every other move strictly loses. Total army weight is a monovariant: it never goes up. Press Show the weights to see each cell shaded by its σ-weight — the glow piles up near the target and fades to nothing far away.
And the whole army weighs exactly 1
Now sum the weight of every soldier in the full, infinite half-plane against a target on row 5. The rows form geometric series in σ, and they collapse — using 1−σ = σ² and 1+σ = 1/σ — to a startlingly clean total:
S = σ⁵ · (1+σ)/(1−σ)² = σ⁵ · σ⁻¹ · σ⁻⁴ = σ⁰ = 1.000000…The entire infinite army is worth exactly 1 — the very same as a single soldier standing on the target (σ⁰ = 1). To occupy row 5 you would have to gather all of that weight onto one cell, wasting none of it — yet you have only finitely many soldiers (strictly less than the full 1), and every move that doesn't bring a soldier closer to the target throws weight away. You can never get there. That is Conway's 1961 proof, and the meter is running it in front of you.
The same accounting, run against rows 1 through 4, gives the army a starting weight above 1 — there is slack — and indeed soldiers reach those rows (the Solve it button shows one way for each). Row 5 is the first row where the books exactly balance, and exact balance, with finite means, is loss.
Show the check
The mathematics here is not asserted from memory. A self-contained verifier re-derives it from first principles — the algebra symbolically (in exact arithmetic over √5, not floating point), and the reachability by replaying actual jump sequences on a real board. It needs Python 3 with sympy; save verify.py and run:
pip install sympy python3 verify.pyIt checks, and exits 0 only if all hold: σ²+σ−1 = 0;
σ = 1/φ; the jump-conservation identity
σⁿ = σⁿ⁺¹+σⁿ⁺²; that jumps away from the target, or across its
column or row, strictly lose weight; that the infinite half-plane sums to
exactly 1 for a row-5 target; that finite truncations sit below 1.
It also plays out solutions it finds itself, on smaller armies inside this board
(10 to 120 soldiers), reaching rows 1, 2, 3 and 4 and validating every jump (a search that
runs out of budget is reported, not failed). The page's Solve it lists for rows 1–3
are the same move-lists; its 62-move row-4 list comes from the companion search
gen_solutions.py (not published) on this board. The known minimal armies, for the record, are
2, 4, 8, 20 soldiers for rows 1–4 (Conway; Beasley) — our replays
for rows 2–4 use more (5, 13 and 77), since they are found by search, not optimised. (The
minimal armies and the history in the footer are cited, not checked.)
The honest seams
The board you play is finite (columns −9…9, depth 9), so its starting weight against row 5 is 0.9819, already short of 1 — impossibility you can read off directly. The stronger statement, that no finite army on the truly infinite board can reach row 5, is the S = 1 argument above: the infinite total is exactly 1, any finite army is strictly below it, weight never rises, so the threshold is never met. The taxicab metric, the value of σ, and the conservation identity are the load-bearing facts, and each is checked symbolically. One subtlety named plainly: weight ≥ 1 is a necessary condition to occupy the target, not a sufficient one — which is why row 5's unreachability is a proof, while rows 1–4's reachability is shown by exhibiting explicit solutions rather than inferred from the meter.