Skip to algorithm editor
sims//boarding.js

Boarding Simulator

Get every passenger into their assigned seat as quickly as possible. The aisle is narrow, luggage takes time to stow, and passengers may have to stand up to let someone reach a window seat.

Your algorithm chooses the boarding order. Try grouping passengers by row, seat, or travel party, then watch where the queue slows down.

How to use it

  1. Open boarding.js and choose a stock algorithm from the dropdown. Run it once to see how it behaves before changing the code.
  2. Use Run below the preview to start the simulation. Pause to inspect it, step forward one tick at a time, or reset to start over. The speed slider changes how fast you watch the run.
  3. Edit the JavaScript in the file tab. Open reference.md for the algorithm API, or Settings to change the scenario. Use the same seed when comparing two approaches: it recreates the same setup.
  4. Click Test 100 seeds to check more than one scenario. The Benchmarks panel shows progress and results; the Output panel helps you inspect what happened.
  5. When you are happy with your algorithm, click Submit algorithm to score it against 1,000 canonical seeds. Open the Leaderboard to compare submissions.

What makes a good result?

The score is the total boarding time in ticks. Lower is better: the flight is ready when everyone is seated.

Work with an agent

Open the Agent tab to connect an AI coding agent. Copy the provided prompt into your agent so it can help edit the algorithm, run experiments, and inspect results in this browser.

Preview737–800 · 30 rows · 3–3 · seed 12345
Seed
12345
Elapsed
0ticks
Average wait
0.0ticks
Seated
0/ 0
In aisle
0people
At the gate
0people
DOORFEDCBA010203040506070809101112131415161718192021222324252627282930Seat 1F · unassignedSeat 1E · unassignedSeat 1D · unassignedSeat 1C · unassignedSeat 1B · unassignedSeat 1A · unassignedSeat 2F · unassignedSeat 2E · unassignedSeat 2D · unassignedSeat 2C · unassignedSeat 2B · unassignedSeat 2A · unassignedSeat 3F · unassignedSeat 3E · unassignedSeat 3D · unassignedSeat 3C · unassignedSeat 3B · unassignedSeat 3A · unassignedSeat 4F · unassignedSeat 4E · unassignedSeat 4D · unassignedSeat 4C · unassignedSeat 4B · unassignedSeat 4A · unassignedSeat 5F · unassignedSeat 5E · unassignedSeat 5D · unassignedSeat 5C · unassignedSeat 5B · unassignedSeat 5A · unassignedSeat 6F · unassignedSeat 6E · unassignedSeat 6D · unassignedSeat 6C · unassignedSeat 6B · unassignedSeat 6A · unassignedSeat 7F · unassignedSeat 7E · unassignedSeat 7D · unassignedSeat 7C · unassignedSeat 7B · unassignedSeat 7A · unassignedSeat 8F · unassignedSeat 8E · unassignedSeat 8D · unassignedSeat 8C · unassignedSeat 8B · unassignedSeat 8A · unassignedSeat 9F · unassignedSeat 9E · unassignedSeat 9D · unassignedSeat 9C · unassignedSeat 9B · unassignedSeat 9A · unassignedSeat 10F · unassignedSeat 10E · unassignedSeat 10D · unassignedSeat 10C · unassignedSeat 10B · unassignedSeat 10A · unassignedSeat 11F · unassignedSeat 11E · unassignedSeat 11D · unassignedSeat 11C · unassignedSeat 11B · unassignedSeat 11A · unassignedSeat 12F · unassignedSeat 12E · unassignedSeat 12D · unassignedSeat 12C · unassignedSeat 12B · unassignedSeat 12A · unassignedSeat 13F · unassignedSeat 13E · unassignedSeat 13D · unassignedSeat 13C · unassignedSeat 13B · unassignedSeat 13A · unassignedSeat 14F · unassignedSeat 14E · unassignedSeat 14D · unassignedSeat 14C · unassignedSeat 14B · unassignedSeat 14A · unassignedSeat 15E · unassignedSeat 15D · unassignedSeat 15C · unassignedSeat 15B · unassignedSeat 16F · unassignedSeat 16E · unassignedSeat 16D · unassignedSeat 16C · unassignedSeat 16B · unassignedSeat 16A · unassignedSeat 17F · unassignedSeat 17E · unassignedSeat 17D · unassignedSeat 17C · unassignedSeat 17B · unassignedSeat 17A · unassignedSeat 18F · unassignedSeat 18E · unassignedSeat 18D · unassignedSeat 18C · unassignedSeat 18B · unassignedSeat 18A · unassignedSeat 19F · unassignedSeat 19E · unassignedSeat 19D · unassignedSeat 19C · unassignedSeat 19B · unassignedSeat 19A · unassignedSeat 20F · unassignedSeat 20E · unassignedSeat 20D · unassignedSeat 20C · unassignedSeat 20B · unassignedSeat 20A · unassignedSeat 21F · unassignedSeat 21E · unassignedSeat 21D · unassignedSeat 21C · unassignedSeat 21B · unassignedSeat 21A · unassignedSeat 22F · unassignedSeat 22E · unassignedSeat 22D · unassignedSeat 22C · unassignedSeat 22B · unassignedSeat 22A · unassignedSeat 23F · unassignedSeat 23E · unassignedSeat 23D · unassignedSeat 23C · unassignedSeat 23B · unassignedSeat 23A · unassignedSeat 24F · unassignedSeat 24E · unassignedSeat 24D · unassignedSeat 24C · unassignedSeat 24B · unassignedSeat 24A · unassignedSeat 25F · unassignedSeat 25E · unassignedSeat 25D · unassignedSeat 25C · unassignedSeat 25B · unassignedSeat 25A · unassignedSeat 26F · unassignedSeat 26E · unassignedSeat 26D · unassignedSeat 26C · unassignedSeat 26B · unassignedSeat 26A · unassignedSeat 27F · unassignedSeat 27E · unassignedSeat 27D · unassignedSeat 27C · unassignedSeat 27B · unassignedSeat 27A · unassignedSeat 28F · unassignedSeat 28E · unassignedSeat 28D · unassignedSeat 28C · unassignedSeat 28B · unassignedSeat 28A · unassignedSeat 29F · unassignedSeat 29E · unassignedSeat 29D · unassignedSeat 29C · unassignedSeat 29B · unassignedSeat 29A · unassignedSeat 30F · unassignedSeat 30E · unassignedSeat 30D · unassignedSeat 30C · unassignedSeat 30B · unassignedSeat 30A · unassigned
0ticks
QuickJS sandbox
Awaiting simulation start