Skip to content

Claude Opus 5.5 (effort default (no --effort flag) · thinking on) on Life-like automaton from RLE with a Klein-bottle grid and a playable animated page

AClaude Opus 5.5default · thinking on · Claude Code 2.1.299 (headless -p) · cloud · 2026-10-20 · by @bobsiopener

Trust 80%Fully autonomoussuccess · first trySuperseded
Estimated cost
$0.25
Wall time
58s
Human step-ins
0
Outcome
Pass

Compare with other models on this task →

Superseded. This run was rescored on 2026-10-20 and replaced by a newer run. It no longer counts toward rankings, use-case tables or the data export; it is kept here for the record.

Summary

Exact prompt

# Life-like cellular automaton from an RLE file, with a playable page `input.json`: `width`, `height`, `topology`, `rule`, `pattern` (an RLE file name), `offset` [ox, oy], `generations` G, `checkpoints` (list of generation numbers). Write `solve.py` (Python 3 standard library only); `python solve.py input.json answer.json` must write `answer.json` and `life.html` in the working directory. Fresh inputs are generated. ## RLE grammar (full) 1. Lines whose first non-blank character is `#` are comments. Blank lines are ignored. 2. The first non-comment line is the header `x = m, y = n[, rule = ...]`. Ignore its values; the rule always comes from `input.json`. 3. The remaining lines are concatenated with line breaks removed. Everything after the first `!` is ignored, even if it looks like more pattern. 4. Tokens are an optional decimal run count (default 1) followed by a tag: `o` (or any other letter except `b`/`B`) = live cells, `b`/`B` or `.` = dead cells, `$` = end of row. A count on `$` skips that many rows: `3$` moves down 3 rows and resets x to 0. Missing trailing dead cells in a row are implied. 5. Pattern cell (x, y) is placed at grid cell (x+ox, y+oy). For `torus`/`klein`, wrap that position with modulo width/height. For `bounded`, drop cells that fall outside the grid. ## Rule string 6. `Bdigits/Sdigits` (case-insensitive; spaces around `/` allowed) gives the birth and survival neighbour counts. A string with no letters, `digits/digits`, is the legacy **S/B** order: survival first, then birth (`23/3` = B3/S23). Either digit list may be empty. ## Topology (8-neighbour Moore neighbourhood) 7. `bounded`: cells outside the grid are always dead. `torus`: both axes wrap. `klein`: x wraps normally; when a neighbour crosses the top or bottom edge (ny < 0 or ny >= height), its x is mirrored to width-1-x before both axes wrap. A neighbour position that appears more than once counts more than once. (This happens only on tiny grids, never in the tests.) 8. A dead cell with a neighbour count in B is born; a live cell with a count in S survives; all others die. Updates are simultaneous. ## answer.json `{"birth": sorted B, "survive": sorted S, "initial_population": n, "populations": [pop at gen 0..G], "cells_at": {"<g>": [[x, y], ...] for each checkpoint, sorted by y then x}}` ## life.html (checked in a headless browser with network blocked) - A single self-contained file: no external scripts, styles, images, fonts or network calls; under 300 KB. Embedding the initial cells is fine. - It contains `<canvas id="board">` drawing the grid, plus elements `#gen` and `#pop` whose text is the current generation number and live-cell count. - On load it starts animating at least 4 generations per second. - It exposes `window.life` with `reset()` (back to generation 0, stays paused or playing as before), `step()` (exactly one generation, updates #gen/#pop), `play()`, `pause()` and `cells()` (live cells as [[x, y], ...] sorted by y then x). It must use the same rules, topology and placement as above. ## Scoring Hidden checks (partial credit; all must pass; exact): - `rule_and_rle_parse`, `populations_klein`, `checkpoint_cells`; - `life_html_structure`; - `browser_step_exact`: pause, reset, 37 steps; then `cells()`, #gen = `37` and #pop must match; - `browser_autoplay_no_network`: reset, play, wait 2 s; #gen >= 4, #pop = cells().length, no network requests; - `fresh_run_1`, `fresh_run_2` (new pattern, rule and topology; the second also re-runs the browser step check). 40-second limit per run.

Creative follow-up to batch 11, but the animation is checked by stepping it in a headless browser and comparing cell sets against the Python reference. Original benchmark task written for usecaserank.com (not based on a specific public post). Headless, offline run on a reproducible fixture. Each run's notes say how its cost was measured (estimates are marked).

Success criteria: 1. rule_and_rle_parse 2. populations_klein 3. checkpoint_cells 4. life_html_structure 5. browser_step_exact 6. browser_autoplay_no_network 7. fresh_run_1 8. fresh_run_2

Setup notes: Use Case Scout batch 12 case m12-life-rle-animation (offline, synthetic fixture). Prepared with batch12/prepare.sh; hidden key/checker kept outside the agent's work dir (temp dir during the run). Prompt = TASK.md verbatim. Scored with the case's scorer: `python score.py WORKDIR KEYDIR` (python3, run from the case dir). Tools: Read/Write/Edit/Glob/Grep/Bash, web disabled. Single run, no retries. 1-min load average at scoring 2.41 (8 cores). life.html rendered offline with google-chrome headless (CDP pipe, network blocked): PNG 1280x800 at ~3 s after load; MP4 ~6 s captured at 1280x720, H.264 1280x720. Claude Code's own reported cost for claude-opus-5.5: $0.254009. Score: 8/8. Cost is an ESTIMATE: measured tokens x pricing.json list price (Claude Pro subscription, nothing billed); input_tokens include cache reads and writes. Single run.

Estimated cost List-price estimate; not actually billed.

Output

Metrics

Estimated cost
$0.25
Wall time
58s
Human step-ins
0
Turns
6
Model usage
ModelInput tokOutput tokCost
AClaude Opus 5.5anthropic/claude-opus-5.5effort default (no --effort flag) · thinking on136,1616,164$0.25

Reproduce this run

  1. Use the use case prompt on the use case page.
  2. Same setup: Claude Opus 5.5 (anthropic/claude-opus-5.5, effort default (no --effort flag) · thinking on) via Claude Code 2.1.299 (headless -p), cloud.
  3. It counts as a success only if it meets every success criterion: 1. rule_and_rle_parse 2. populations_klein 3. checkpoint_cells 4. life_html_structure 5. browser_step_exact 6. browser_autoplay_no_network 7. fresh_run_1 8. fresh_run_2
  4. Log model, tokens, wall time, human step-ins and the evidence log, then submit it as a reproduction. A different model? Submit a head-to-head rerun.

How runs are scored: Methodology.

Was this useful?

⇄ Rerun on another model

Automated checks

Trust 80% comes from these checks (how Trust % works).

Evidence log
[
 {
  "duration_api_ms": 55431,
  "stop_reason": "end_turn",
  "session_id": "[REDACTED]",
  "total_cost_usd": 0.25400920000000005,
  "usage": {
   "input_tokens": 12,
   "cache_creation_input_tokens": 13263,
   "cache_read_input_tokens": 122886,
   "output_tokens": 6164,
   "output_tokens_details": {
    "thinking_tokens": 684
   },
   "server_tool_use": {
    "web_search_requests": 0,
    "web_fetch_requests": 0
   },
   "service_tier": "standard",
   "cache_creation": {
    "ephemeral_1h_input_tokens": 13263,
    "ephemeral_5m_input_tokens": 0
   },
   "inference_geo": "global",
   "iterations": [
    {
     "input_tokens": 2,
     "output_tokens": 808,
     "cache_read_input_tokens": 25118,
     "cache_creation_input_tokens": 291,
     "cache_creation": {
      "ephemeral_5m_input_tokens": 0,
      "ephemeral_1h_input_tokens": 291
     },
     "type": "message"
    }
   ],
   "speed": "standard",
   "fallback_credit": null
  },
  "modelUsage": {
   "claude-opus-5-5": {
    "inputTokens": 12,
    "outputTokens": 6164,
    "cacheReadInputTokens": 122886,
    "cacheCreationInputTokens": 13263,
    "webSearchRequests": 0,
    "costUSD": 0.25400920000000005,
    "contextWindow": 1000000,
    "maxOutputTokens": 128000,
    "thinkingTokens": 684,
    "canonicalModel": "claude-opus-5-5",
    "provider": "firstParty",
    "costBasis": "list"
   }
  },
  "permission_denials": [],
  "terminal_reason": "completed",
  "fast_mode_state": "off",
  "fast_mode_disabled_reason": "sdk_opt_in_required",
  "subagent_stats": {
   "spawned": 0,
   "requested": {
    "background": 0,
    "foreground": 0,
    "unset": 0
   },
   "started_in_background": 0,
   "max_depth": 0,
   "spawned_by_subagents": 0,
   "completed": 0,
   "failed": 0,
   "killed": {
    "parent": 0,
    "user": 0,
    "system": 0
   },
   "refused": {
    "depth_limit": 0,
    "concurrency_limit": 0,
    "budget": 0
   },
   "by_type": {}
  },
  "safety_stops": 0,
  "is_error": false,
  "num_turns": 6,
  "subtype": "success",
  "api_error_status": null,
  "result": "`solve.py` is written and works on the provided input. Running `python solve.py input.json answer.json` takes about 0.1 s and writes both `answer.json` and `life.html` (3 KB).\n\n**What I checked:**\n- **The given input** (klein 54\u00d748, B36/S23, 160 generations): it gets birth [3, 6], survive [2, 3], and starts with 94 live cells. The text after the `!` in the pattern file is ignored.\n- **Page against solver:** I ran the page's JavaScript in Node with the page elements stubbed out and stepped it through every generation. Every population and every checkpoint cell list matched `answer.json` exactly.\n- **Other rules and topologies:** I repeated that comparison on torus and bounded grids with the rules `23/36` (old survival-first order), `b3 / s23` and `S23/B36`. All of them matched too.\n- **Autoplay in headless Chrome:** after 2 seconds the page showed generation 40 (about 20 generations per second) with #pop updating alongside it.\n\nI haven't run the hidden browser checks themselves: `reset`/`step` driven through the real browser, and the no-network requirement. The page loads nothing external, so that one should pass.\n\n**How it works:**\n- **RLE:** comment lines (starting with `#`) and blank lines are skipped, and the first remaining line is treated as the header and ignored. Everything after the first `!` is dropped. Any letter other than `b`/`B` is a live cell, and a count before `$` skips that many rows.\n- **Rule:** if the string contains letters, it's read as `B\u2026/S\u2026` in either order and any case. If it's digits only, it's read as survival first, then birth.\n- **Topology:** each cell's neighbour list is computed once at the start. On klein, a neighbour that crosses the top or bottom edge has its x mirrored before wrapping. A position that appears twice in the list counts twice.\n- **`life.html`:** the initial cells, rule and topology are embedded in the file. The page uses the same neighbour logic as the Python and starts playing on load at one generation every 50 ms. `window.life` provides `reset`, `step`, `play`, `pause` and `cells`. There are also on-page Play, Pause, Step and Reset buttons.",
  "ttft_ms": 2462,
  "type": "result",
  "duration_ms": 57617,
  "uuid": "[REDACTED]",
  "ttft_stream_ms": 1223,
  "time_to_request_ms": 300,
  "first_content_frame_ms": 1223,
  "queued_turn_count": 0,
  "result_index": 0
 }
]

Get new runs and ranking changes weekly