๐ŸŽฎ Real-World Arenas

Two games ยท one leaderboard
๐Ÿ† Full results

๐Ÿ† Leaderboard

All submissions โ†’
loadingโ€ฆ

๐Ÿš• What's the story?

This is a coding competition. Each participant writes their own Matching algorithm โ€” that is, a function that, in a live Uber simulation, decides which driver is assigned to which rider.

The game engine simulates a real world: drivers move, riders make requests, and fares, ratings, and driver fatigue are all computed. The smarter your matcher, the more trips get completed and the higher your score. Runs finish in moments, then land on the leaderboard above โ€” and you can watch a full replay of any run.

๐Ÿ“‹ Rules & scoring

๐Ÿ† Your score is your total revenue โ€” the sum of fares from every completed trip. The Results board ranks matchers by revenue, highest first. Complete more (and longer) trips and avoid cancellations.
๐Ÿ’ต Trip farefare = 5 + 1.5 ร— trip distance โ€” added to your revenue on each completed trip (distance from origin to destination, not the pickup drive).
โŒ CancellationA rider waits at most 5 minutes from request to pickup. Miss that window โ€” or never assign a driver โ€” and the trip cancels for zero revenue.
โญ Rider ratingStars from the wait between request โ†’ pickup. Match fast to score high.
โญ Driver ratingStars from the time between assignment โ†’ pickup. Pick the nearest free driver.
๐Ÿ˜ด DriversAccept every trip, one at a time. After 30 min with no trip they go offline (sleep), and wake up 60 min later.

Both ratings use the same scale (minutes of wait):

Wait timeRating
under 1 minโญโญโญโญโญ
1โ€“2 minโญโญโญโญ
2โ€“3 minโญโญโญ
3โ€“4 minโญโญ
over 4 minโญ

โฑ๏ธ Ticks & timing

The world advances in discrete steps called cycles (ticks). Each cycle your matcher is called once: the engine sends you the current world state, your decide() returns assignments, then the engine moves the drivers, settles completions and cancellations, and updates the scores.

โฑ๏ธ One cyclerepresents 1 game-minute. Every rule time is in game-minutes โ€” so the 5-minute pickup cap is 5 cycles, and the 30-minute sleep is 30 cycles.
โšก Full speedThe arena runs as fast as your matcher answers โ€” the world advances the instant you submit, not on a fixed clock. Answer faster, finish sooner. (A slow/dead client is auto-advanced after a timeout so it can't stall.)
๐Ÿ Run lengthEach city runs 240 cycles (= 4 game-hours); your matcher plays every city in turn on one connection. When the last city's last cycle runs, the run finishes and its combined total is saved to the Results board.
๐Ÿง Each cycleNew ride requests appear (Poisson). How many โ€” and how many drivers exist โ€” varies by city; see โ€œThe citiesโ€ below.
โšก Your turnSend your assignments for the current tick; the engine immediately advances. Assignments tagged with an outdated tick are rejected.

(These are the engine's current settings and can be tuned server-side.)

๐ŸŸ The cities

Every run is a gauntlet: your matcher plays all of these cities back-to-back on one connection, and your score is the combined total across them. Each city is a different world โ€” its own map size, demand, and driver pool โ€” so a strong matcher has to adapt. Loaded live from the engine:

โ€ฆloading citiesโ€ฆ

๐ŸŽฎ How do I play?

1Create an account
Register up top with a username + password. You get a personal API token โ€” your client uses it to prove which player it is.
2Get the sample code
Clone the repo from GitHub. A ready-to-run client is included for both Node.js and Python.
3Write your algorithm
Change only the decide() function, run with your token โ€” your run lands on the leaderboard above, and you can watch its replay.
๐Ÿ”‘ Log in above to get your API token, then pass it to the client as the TOKEN environment variable. Every session is tied to your account, so the leaderboard is per player and your submissions are public for everyone to see.

First, get the sample clients:

git clone https://github.com/Real-World-Games/User-Simulation-Clients
cd User-Simulation-Clients

Then run one of the sample clients with your token (each connects to this arena):

๐ŸŸข Node.js (Node 22+)
cd node-client
npm install
TOKEN=your_api_token npm start
๐Ÿ Python (Python 3.10+)
cd python-client
pip install -r requirements.txt
TOKEN=your_api_token python sample_client.py

The run finishes in moments and lands on the leaderboard at the top of this page, where you can watch its replay. Then open the sample client and change the decide() function to write your own matching strategy.

โฌ‡๏ธ Get the sample clients from GitHub github.com/Real-World-Games/User-Simulation-Clients