The arena · trials
Pick a trial. Get rated.
50 trials live across five domains. The library grows with every competitor who authors one. Filter by discipline; the clock starts when you say so.
Two Sum, but make it sing
Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.
Skyline merge
Merge K sorted streams into one. The cursor matters more than the math.
Trapping rain water
Walk the histogram. Capture the water. Do not allocate a second array.
K-th smallest in a stream
Pull the k-th smallest from a stream that never stops. Memory is the constraint.
Word ladder, abridged
Transform start into end one letter at a time. Every step is a real word.
Combobox from blank
Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.
Toast queue without a library
Merge K sorted streams into one. The cursor matters more than the math.
Form state without a framework
Walk the histogram. Capture the water. Do not allocate a second array.
Date picker, keyboard-first
Pull the k-th smallest from a stream that never stops. Memory is the constraint.
Drag handle that does not lie
Transform start into end one letter at a time. Every step is a real word.
The for-loop that closures forgot
Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.
React batching ghost
Merge K sorted streams into one. The cursor matters more than the math.
The async leak in checkout
Walk the histogram. Capture the water. Do not allocate a second array.
Off-by-one in the paginator
Pull the k-th smallest from a stream that never stops. Memory is the constraint.
Race in the upload queue
Transform start into end one letter at a time. Every step is a real word.
Untangle the god component
Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.
Kill the prop-drilling
Merge K sorted streams into one. The cursor matters more than the math.
Inline the hook, save the file
Walk the histogram. Capture the water. Do not allocate a second array.
Replace the switch with a map
Pull the k-th smallest from a stream that never stops. Memory is the constraint.
Unify the three date utils
Transform start into end one letter at a time. Every step is a real word.
Coax a JSON schema out of it
Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.
One-shot the SQL migration
Merge K sorted streams into one. The cursor matters more than the math.
Talk it into the right regex
Walk the histogram. Capture the water. Do not allocate a second array.
Make it disagree with you
Pull the k-th smallest from a stream that never stops. Memory is the constraint.
Get a clean diff, not a rewrite
Transform start into end one letter at a time. Every step is a real word.
Build a B-tree from a flat log
Replay an append-only log into a balanced B-tree. Persist nothing. Hit 1M ops in under a minute. The cursor matters more than the math.
Shortest path through a moving graph
Edges flicker on a 100ms tick. Find a path that survives the next N ticks. No repathing in a tight loop — predict the graph.
Marathon: a parser for a real grammar
Hand-roll a recursive-descent parser for a small but real config grammar. Errors must point at the column. No parser generators.
K-server with a hostile adversary
k movable servers, requests scripted to punish your last decision. Beat the offline optimum within a competitive ratio. Show your work.
Priority queue that survives 10M inserts
Heap of your choice. Decrease-key in amortised O(log n). Allocator pressure is the real test — measure it.
Spreadsheet: 200 cells, formulas, undo
Editable grid, A1 notation, =SUM/=AVG/range refs, dependency recompute, and full undo. No spreadsheet libraries. Tape rolls the entire build.
Kanban with drag, keyboard, and persist
Three columns, drag to reorder, full keyboard reorder, IndexedDB persistence across reloads. ARIA on every drag handle or ROOM eats you alive.
Chat UI: virtualised, threaded, search
10k messages, scroll restoration, threaded replies, instant local search. The scroll must not jitter. The search must be sub-50ms.
WYSIWYG: bold/italic/lists, no contenteditable hell
A small editor that doesn't betray you on paste, doesn't lose carets on focus, doesn't break with emoji. Roll your own model.
Image cropper with pinch-zoom on touch
Crop, rotate, pinch-zoom, two-finger pan. Output the cropped blob. Mobile-first — and it must hold 60fps on a mid-range phone.
The checkout that loses one in a thousand
Flaky test fires 0.1% of the time in CI. Find the race, write the failing test, fix it, prove the fix is not vibes.
Five bugs, one component, one hour
A modal that lies in five different ways: focus trap, aria, scroll lock, async dismiss, and a stale prop. Find them all. Tape watch-along is half the fun.
The websocket that lies about closing
Reconnect storm under flaky network. Old handlers fire on new sockets. Make it correct first, fast second.
Server returns 200, frontend shows error
Three layers between the server and the toast. The lie is in one of them. Bisect with intent — no console-flailing.
The off-by-one in the calendar week
Week numbers drift by one near year boundaries in three locales. Find it without reaching for a date library.
Untangle a 1,400-line god component
Extract three pure hooks and a state machine without changing a single test. The diff itself is the score.
Replace 4 date utils with one
Four date helpers across the repo, three of them subtly wrong. Unify, prove correctness, delete the ghosts.
Push state up out of three siblings
Three siblings duplicating the same fetch. Lift, share, and don't make the parent a god component while you're at it.
Rip out a global event bus, safely
A global pub/sub holding 14 listeners across the app. Replace it with explicit ownership without breaking a thing.
Type the untyped 800-line legacy module
Strict mode on. No anys. The module ships and the public API stays byte-for-byte the same.
Coax a perfect SQL migration in one shot
Engine never reads the schema. You describe it. One shot, valid SQL, runs first try, no destructive ops. Burn fewer tokens than the field.
Make it disagree with its first answer
Get the engine to argue against its own first response — substantively, not theatre. ROOM grades whether the second answer is actually better.
One-shot a regex for an evil log format
Multiline log with embedded JSON, escaped commas, and a timestamp from hell. One regex, no post-processing, all 12 test lines.
Drive a refactor across 6 files via prompts only
No hand-edits. Prompt the engine through a 6-file refactor. Tests must stay green every commit. Token economy is half the score.
Get a clean, minimal diff — not a rewrite
Three classic engine failure modes: rewriting the world, dropping comments, renaming things. Defeat all three in one transcript.