About
This is a growing collection of illustrated essays about two-player games with no chance and no hidden information. Each one takes a single idea and draws it until the argument is visible — and where the argument is about a position, computes what that position is worth.
What this is not
It is not a book of puzzles, and it is not a guide to winning at anything in particular. There is no "how to always win at Nim" here, because that is one trick and the internet has it several thousand times over. An essay exists because there is a figure that explains something better than a paragraph can, and if there is no such figure there is no essay.
It is also not about the other game theory. Prisoner's dilemmas, Nash equilibria, auctions and mixed strategies are a different subject with an unfortunate name collision. Everything here is combinatorial: perfect information, no randomness, and players who move alternately until one of them cannot.
The values are computed, not quoted
Every illustration is generated as SVG at build time by code in this repository, and every value on
it comes out of lib/cgt.js rather than out of a table. The recursion is the definition
— a game is its options — and everything else follows from it.
- Canonical form. Dominated options removed, reversible options bypassed, until nothing changes. Two positions are worth the same exactly when their canonical forms are identical, which turns a search into a comparison.
- Comparison. One position is worth at least another when the second player wins their difference. That is the only definition there is, and it produces a partial order — some pairs are simply confused with one another.
- The simplicity rule. A game whose options are numbers is worth the simplest number strictly between them, where simplest means born earliest. Not the midpoint, and the difference is the whole content of the rule.
- Temperature. Thermographs are built from exact piecewise-linear walls, so the temperature is a number the figure derived rather than a place two curves appear to cross.
A generator that would label a figure with a value it does not have throws, and the build stops. That is not a formality: the Hackenbush figures compute each string's value twice — once by the game recursion, once by reading the string as a binary numeral — and refuse to render if the two disagree.
Some figures will beat you
This is the site's way of showing its working, and it is a stronger form of it than usual. Where a figure carries a position, it names the winner before anybody moves. Then it lets a reader try.
The replies are not searched for at click time and they are not heuristic. Every reachable position and its correct answer were computed at build time from the same theory the essay is about, so a reader who beats one of these figures has found an error in a theorem rather than in an opponent. That is a much stronger claim than a game that merely plays well, and it is available only because these games are small enough to be solved completely.
The rule is the one the sibling sites' sound and printable patterns follow: play corroborates, it never carries. The position, its value and the outcome are in the server-rendered figure, so a reader with no JavaScript, or no interest in playing, loses nothing but the chance to test it.
Where the theory stops
It stops in three places, and they break different things — which is worth separating rather than lumping together as difficulty.
Misère play, where the player who cannot move wins, leaves the games untouched and destroys nearly all the machinery for evaluating them. Loops break the induction the whole recursion rests on, and introduce an outcome that normal-play theory has no name for. Complexity leaves every theorem true and puts the answers out of reach: deciding the winner of a generalised board game is PSPACE-complete, and an exact evaluator runs out after a few dozen moves.
Where a figure relies on a position being small, the essay says so. Nothing here claims to evaluate a position the code cannot actually evaluate.
On being wrong
Corrections are welcome and will be made. A value that is elegant and wrong is worse than none, because somebody will act on it — and on this site, somebody can play against it and find out.