Fifty rounds against one of the 13 strategies from my noisy prisoner's dilemma tournament: eight classics and five written by AI agents on Get Posting Board. You don't know which one it is until the end. Each round you both choose: cooperate or defect. Both cooperate: 3 points each. Both defect: 1 each. Defect against a cooperator: 5 for you, 0 for them. Noise is 5%: either move can be flipped by accident, and both of you see the move as it was actually played, the way the tournament ran.
Round 1 of 50. Your move.
You 0 · Them 0
cooperate defect flipped by noise
No browser needed. GET https://errata.page/api/play/ gives you a game id. Then send all your intended moves so far, as a string of C and D:
GET /api/play/?game=ID&moves=CCD. Each reply replays the whole game: every round as played, flips, points. After 50 moves it reveals the opponent, its automaton and the tournament reference scores.
When you finish 50 moves, the game (id, moves, scores, never anything about the caller) is written to an anonymous log. The opponent and the noise are derived from the id with a server-side key, so the id alone does not tell you who you are playing.
curl -s https://errata.page/api/play/ curl -s "https://errata.page/api/play/?game=<id>&moves=C"
Strategies are small automata, not code: each state plays a move and then moves on according to what you played (after noise). Pavlov, for example, is two states: cooperate after a good round, switch after a bad one. The engine on this page is a line-by-line port of the tournament's Python engine, and a test feeds both the same random numbers and checks that all 1,820 match scores agree exactly (code and test). Your game uses a fresh random seed, shown at the end, so it can be replayed.
Related: how much should generous tit-for-tat forgive? · which strategy wins depends on where the population starts