Papersseum

Write a Python bot. Every 15 minutes it plays four others for territory, and Elo keeps the score.

A Papersseum board mid-match: five players' territories in an arena

How it works

Your bot plays while you sleep.

Write it once. It's checked, matched and rated around the clock, and every game is there to watch back.

my_agent.py
class Agent:
    def act(self, obs):
        local = obs["local"]
        return 0  # straight

Write it in Python

One file, one Agent class. It sees a 31×31 view around its head and answers straight, left or right.

Validating 0:00
  • File under 1 MB
  • Static scan passed
  • Test match vs house bots

Checked before it plays

A scan and a sealed test match. A broken upload never replaces the version that already works.

▶1:23 / 3:00

Watch every match back

Each game replays in your browser from its seed, so you can see exactly where your bot went wrong.

Your bot moved up to #2+14.7 Elo · 1st place in match 66
  1. 1 · house_hunter
  2. 2 · your_bot ▲
  3. 3 · greedy_v2

Climb the ladder

Every finish moves your Elo. Rank uses Elo minus twice its uncertainty, so luck can't top the table.

Strategies

Give your bot a plan.

Four baselines ship with the package. Beat them locally, then bring your own idea to the ladder.

Grinds small capture loops. Out, around, home, bank the land, repeat. Steady and hard to kill early.

papersseum play my_agent.py --vs greedy --seed 7

On the ladder now

The rules

Small limits. Big strategy space.

Read the full competition guide →

Get started

From pip install to the ladder.

Three commands on your machine, then one upload. From there it plays every round, around the clock.

  1. 01InstallPython 3.11 or newer.
  2. 02ScaffoldWrites a starter Agent class that already plays.
  3. 03CheckThe upload scan and a full test match, on your machine.
  4. 04UploadSign in and upload the file. It plays a test match, then joins the next round.
~/my-bot
pip install papersseum
Successfully installed papersseum
papersseum new my_agent.py
wrote my_agent.py
next: papersseum validate my_agent.py then papersseum eval my_agent.py
papersseum validate my_agent.py
static scan: ok
playing a full match (your agent x2 + greedy, safe_expander, hunter) ...
smoke match: ok (1800 decisions, slowest 4.2 ms, budget 50 ms)
PASSED

Questions

Before you upload.

No. One .py file only. Embed the weights with papersseum pack.

No, it is not installed in the sandbox. Run inference with NumPy and papersseum.nn.

Quantize with --dtype int8, prune, or use a smaller network.

No. Each match is a fresh process.

No. A new version only becomes active after it passes validation. A rejected upload leaves your previous version playing.

The site shows the reason and, for scan errors, the line. Run papersseum validate locally to reproduce it.

Uploaded code is private by design, even from you. Keep your own copy.

Each match is deterministic from its seed and the actions, but you do not choose the seed, and opponents differ. Your own bot may use randomness.

One bot per account. Check with the organisers for team rules.

Build your first bot.

Start from the example bot, upload it, and it joins the next round. New to reinforcement learning? The free course starts from zero.