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.


    Codesport · live

    2 open challenge(s) · 1 duel(s) live.

    Duel queue
    ALGO-001ROOKIE

    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.


    par 60sby @house
    ALGO-002MID

    Skyline merge

    Merge K sorted streams into one. The cursor matters more than the math.


    par 90sby @reverie
    ALGO-003PRO

    Trapping rain water

    Walk the histogram. Capture the water. Do not allocate a second array.


    par 120sby @vex.io
    ALGO-004MASTER

    K-th smallest in a stream

    Pull the k-th smallest from a stream that never stops. Memory is the constraint.


    par 150sby @ostara
    ALGO-005ROOKIE

    Word ladder, abridged

    Transform start into end one letter at a time. Every step is a real word.


    par 180sby @kaz
    CRAFT-001MID

    Combobox from blank

    Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.


    par 75sby @house
    CRAFT-002PRO

    Toast queue without a library

    Merge K sorted streams into one. The cursor matters more than the math.


    par 105sby @reverie
    CRAFT-003MASTER

    Form state without a framework

    Walk the histogram. Capture the water. Do not allocate a second array.


    par 135sby @vex.io
    CRAFT-004ROOKIE

    Date picker, keyboard-first

    Pull the k-th smallest from a stream that never stops. Memory is the constraint.


    par 165sby @ostara
    CRAFT-005MID

    Drag handle that does not lie

    Transform start into end one letter at a time. Every step is a real word.


    par 195sby @kaz
    DEBUG-001PRO

    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.


    par 90sby @house
    DEBUG-002MASTER

    React batching ghost

    Merge K sorted streams into one. The cursor matters more than the math.


    par 120sby @reverie
    DEBUG-003ROOKIE

    The async leak in checkout

    Walk the histogram. Capture the water. Do not allocate a second array.


    par 150sby @vex.io
    DEBUG-004MID

    Off-by-one in the paginator

    Pull the k-th smallest from a stream that never stops. Memory is the constraint.


    par 180sby @ostara
    DEBUG-005PRO

    Race in the upload queue

    Transform start into end one letter at a time. Every step is a real word.


    par 210sby @kaz
    REFACTOR-001MASTER

    Untangle the god component

    Given an unsorted list of integers, return the two indices that sum to the target. Linear time. No sort tricks.


    par 105sby @house
    REFACTOR-002ROOKIE

    Kill the prop-drilling

    Merge K sorted streams into one. The cursor matters more than the math.


    par 135sby @reverie
    REFACTOR-003MID

    Inline the hook, save the file

    Walk the histogram. Capture the water. Do not allocate a second array.


    par 165sby @vex.io
    REFACTOR-004PRO

    Replace the switch with a map

    Pull the k-th smallest from a stream that never stops. Memory is the constraint.


    par 195sby @ostara
    REFACTOR-005MASTER

    Unify the three date utils

    Transform start into end one letter at a time. Every step is a real word.


    par 225sby @kaz
    PROMPT-001ROOKIE

    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.


    par 120sby @house
    PROMPT-002MID

    One-shot the SQL migration

    Merge K sorted streams into one. The cursor matters more than the math.


    par 150sby @reverie
    PROMPT-003PRO

    Talk it into the right regex

    Walk the histogram. Capture the water. Do not allocate a second array.


    par 180sby @vex.io
    PROMPT-004MASTER

    Make it disagree with you

    Pull the k-th smallest from a stream that never stops. Memory is the constraint.


    par 210sby @ostara
    PROMPT-005ROOKIE

    Get a clean diff, not a rewrite

    Transform start into end one letter at a time. Every step is a real word.


    par 240sby @kaz
    ALGO-006PRO

    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.


    par 1200sby @house
    ALGO-007MASTER

    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.


    par 1800sby @reverie
    ALGO-008MASTER

    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.


    par 2400sby @vex.io
    ALGO-009PRO

    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.


    par 1500sby @kaz
    ALGO-010PRO

    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.


    par 900sby @ostara
    CRAFT-006MASTER

    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.


    par 2700sby @house
    CRAFT-007PRO

    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.


    par 1800sby @lumen
    CRAFT-008PRO

    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.


    par 2100sby @reverie
    CRAFT-009MASTER

    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.


    par 2700sby @vex.io
    CRAFT-010PRO

    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.


    par 1500sby @ostara
    DEBUG-006MASTER

    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.


    par 1800sby @kaz
    DEBUG-007PRO

    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.


    par 1500sby @halcyon
    DEBUG-008PRO

    The websocket that lies about closing

    Reconnect storm under flaky network. Old handlers fire on new sockets. Make it correct first, fast second.


    par 1200sby @reverie
    DEBUG-009MID

    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.


    par 900sby @ostara
    DEBUG-010MID

    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.


    par 600sby @bram
    REFACTOR-006MASTER

    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.


    par 2700sby @house
    REFACTOR-007PRO

    Replace 4 date utils with one

    Four date helpers across the repo, three of them subtly wrong. Unify, prove correctness, delete the ghosts.


    par 1500sby @vex.io
    REFACTOR-008PRO

    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.


    par 1200sby @kaz
    REFACTOR-009MASTER

    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.


    par 2100sby @reverie
    REFACTOR-010PRO

    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.


    par 1800sby @ostara
    PROMPT-006PRO

    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.


    par 1200sby @reverie
    PROMPT-007MID

    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.


    par 600sby @kaz
    PROMPT-008PRO

    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.


    par 900sby @vex.io
    PROMPT-009MASTER

    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.


    par 2400sby @house
    PROMPT-010MID

    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.


    par 600sby @ostara