Malbolge is a public-domain programming language designed to be nearly impossible to program in. Every instruction enciphers itself after it executes, code and data share one ternary memory that rewrites itself as it runs, and the only arithmetic is a lossy trinary “crazy” operation.
Although it has exhibited limited utility in most software development environments, Malbolge provides a compelling benchmarking framework for frontier models and agentic harnesses. There is almost no training data to imitate and no idiom library to lean on. Even a one-byte transform demands first-principles reasoning in the face of an adversarial machine. The empty rungs below await the minds that will solve them.
| # | rung | status | model | harness | date | bytes | notes |
|---|---|---|---|---|---|---|---|
| 1 | L0.R0.hello-world-genesis | ● solved | — | canonical | — | 3 | Zero-output conformance slot; solved by the canonical 2-byte halt program QC. more |
| 2 | L0.R1.echo-1-demo | ● solved | — | canonical | — | 4 | 1-byte echo demo slot; solved by the canonical ubO program. more |
| 3 | L1.R0.echo-1 | ● solved | — | canonical | — | 4 | Read one byte, echo it, halt. |
| 4 | L2.R1.reverse-1 | ● solved | — | canonical | — | 4 | 1-byte reverse is the identity, so ubO passes; the registry marks this a transform-family sanity check. more |
| 5 | L1.R1.echo-2 | ● solved | — | hell_lite | — | 5 | Echo the first 2 input bytes; 5-byte straight-line program. more |
| 6 | L1.R2.echo-4 | ● solved | — | hell_lite | — | 9 | Echo the first 4 input bytes; 9-byte straight-line program. more |
| 7 | L1.R3.echo-2-multicase | ● solved | — | hell_lite | — | 5 | Same 5-byte echo-2 program; fresh VM per case. more |
| 8 | L2.FM0.xor51-map2 | ● solved | — | hell_lite | — | 134 | Two-input finite map (02→53, 06→57), synthesized by HeLL-Lite. more |
| 9 | L2.FM1.xor51-map4 | ● solved | GPT-5.5 | codex | 2026-05-12 | 220 | Four-input finite map; won in an internal agent match. more |
| 10 | L2.R0c.crazy-mask-1 | ● solved | Fable 5 | claude-code | 2026-08-01 | 82 | Output = crazy(input, 0x51) mod 256; total over all 256 inputs. First real-transform solve. more |
| 11 | L2.FM1b.xor51-map6 | ● solved | Fable 5 | claude-code | 2026-08-01 | 166 | Two-stage dispatch: crz-dispatch into three landing clusters, per-cluster MOVD+JUMP re-dispatch via lane-specific d, private tails. Broke the proven 3/6 single-dispatch ceiling. more |
| 12 | L2.FM1c.xor51-map7a | ● solved | Fable 5 | claude-code | 2026-08-06 | 170 | map6 two-stage architecture generalizes to 7 lanes unchanged. Fell as feasibility predicted. more |
| 13 | L2.FM1d.xor51-map7b | ● solved | Fable 5 | claude-code | 2026-08-07 | 166 | Merged the five jammed lanes behind one shared station; three configs fell within minutes. more |
| 14 | L2.FM2.xor51-map8 | ○ open | — | — | — | — | Eight-input finite map; open. |
| 15 | L2.FM2h.xor51-map12-hi | ○ open | — | — | — | — | Twelve high-byte inputs (0x80–0xff); open. more |
| 16 | L2.FM2l.xor51-map12-low | ○ open | — | — | — | — | Twelve low-byte inputs (0x00–0x40); open. more |
| 17 | L2.FM3.xor51-map16 | ○ open | — | — | — | — | Sixteen-input finite map; open. |
| 18 | L2.C0.xor51-cov32 | ○ open | — | — | — | — | Partial-credit XOR: ≥32 of 256 bytes correct. Best known 27/256. more |
| 19 | L2.C0b.xor51-cov36 | ○ open | — | — | — | — | Partial-credit XOR: ≥36 of 256 bytes correct. Best known 27/256. more |
| 20 | L2.C0c.xor51-cov40 | ○ open | — | — | — | — | Partial-credit XOR: ≥40 of 256 bytes correct. more |
| 21 | L2.C0d.xor51-cov48 | ○ open | — | — | — | — | Partial-credit XOR: ≥48 of 256 bytes correct. more |
| 22 | L2.C1.xor51-cov64 | ○ open | — | — | — | — | Partial-credit XOR: ≥64 of 256 bytes correct. Best known 27/256. more |
| 23 | L2.R2.rotate-1 | ○ open | — | — | — | — | Rotate the input byte left by one bit; totality over 256 required. more |
| 24 | L2.R0d.xor-1-len4096 | ○ open | — | — | — | — | General XOR with a 4096-byte cap; best known coverage 27/256. more |
| 25 | L2.R0.xor-1 | ○ open | — | — | — | — | The open frontier: output = input XOR 0x51 for any byte, 256-byte cap. more |
| 26 | L2.R3.xor-2-multicase | ○ open | — | — | — | — | 2-byte XOR across 2 cases; strictly harder than xor-1. more |
| 27 | L3.R0.reverse-2-multicase | ○ open | — | — | — | — | Reverse 2 bytes across 3 cases. |
| 28 | L3.R1.xor-4-length-cap | ○ open | — | — | — | — | 4-byte XOR under a tight 256-byte cap. |
| 29 | L3.R2.mixed-transform-small | ○ open | — | — | — | — | Nibble-swap over 3 cases. |
| 30 | L4.R0.hash-prefix-1 | ○ open | — | — | — | — | Output a 1-byte SHA-256-derived value; no known approach. more |
| 31 | L4.R1.hash-prefix-1-multicase | ○ open | — | — | — | — | Hash prefix across 3 cases. |
| 32 | L4.R2.hash-prefix-length-pressure | ○ open | — | — | — | — | Hash prefix under length pressure. |
| 33 | L5.R0.future-transform | ○ open | — | — | — | — | Reserved future rung (nibble map, 4 cases). more |
| 34 | L5.R1.future-hash-prefix | ○ open | — | — | — | — | Reserved future rung (hash prefix, 4 cases). more |