Skip to content

Claude Opus 5.5 (effort default (no --effort flag) · thinking on) on Best sailing angle and leg times from a polar table

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

Trust 80%Fully autonomoussuccess · first try
Estimated cost
$0.17
Wall time
32s
Human step-ins
0
Outcome
Pass

Compare with other models on this task →

Summary

Exact prompt

# Best sailing angle from a polar table `input.json` (synthetic) has a boat polar (`polar.tws` wind speeds in knots, `polar.twa` true wind angles in degrees ascending, `polar.speed[j][k]` = boat speed at `twa[j]`, `tws[k]`), the current true wind speed `tws`, and a list of `legs` each with `bearing` (degrees true to the mark), `distance_nm` and `twd` (true wind direction, degrees the wind blows FROM). Write `solve.py` (Python 3 standard library only); `python solve.py input.json answer.json` writes `answer.json` and `polar.svg`. Fresh inputs are used too, so no hard-coding. ## Rules 1. Boat speed at (tws, a): for each table row, interpolate linearly in tws (clamped to the first/last column outside the range); then interpolate linearly in twa between rows (clamped to 180 at the end). For a < `twa[0]` (no-go zone) speed is 0. 2. `upwind`: over integer a in 0..90, maximise VMG = speed*cos(a); `downwind`: over integer a in 90..180, maximise -speed*cos(a). Compare VMG rounded to 4 decimals; on a tie take the smaller angle. Report `{"twa": a, "vmg": value rounded to 3}`. 3. Each leg: over integer courses c = 0..359, a = smallest angle between c and `twd` (0..180), s = speed(tws, a), VMC = s*cos(c - bearing). Take the c with the greatest VMC compared at 6 decimals; ties keep the smaller c. Report `course`, `twa` (a), `boat_speed` (3 dp), `vmc` (3 dp), `hours` = distance / VMC (3 dp) or null if VMC <= 0. 4. `total_hours` = sum of non-null leg hours (3 dp). ## Visual output: polar.svg Static, self-contained SVG (root `<svg>`, no scripts, images, links, fonts or other external assets; renders headless), containing an element `id="polar-curve"` (the polar curve at the given tws) and `<line id="best-upwind">` and `<line id="best-downwind">` drawn from the origin along the best angles. The drawing itself is not graded. ## answer.json `{"upwind": {"twa", "vmg"}, "downwind": {"twa", "vmg"}, "legs": [{"course", "twa", "boat_speed", "vmc", "hours"}, ...], "total_hours"}` ## Scoring Hidden checks (partial credit = fraction passed; all must pass): `best_upwind_downwind`, `upwind_and_downwind_legs` (legs 0-1), `reaching_legs_and_total` (legs 2-3 and total), `polar_svg_static` (polar.svg exists, follows the static rules, has the ids/tags above), `fresh_run_1`, `fresh_run_2`. Numbers within 0.002; integers exact. 60-second limit per run.

Bilinear polar lookup with clamping and a no-go zone, integer angle searches with stated rounding and tie rules, and course-vs-mark VMC that forces tacking or gybing angles on beats and runs. 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).

Benchmark code for comparing AI models, not navigation or safety software.

Success criteria: 1. best_upwind_downwind 2. upwind_and_downwind_legs 3. reaching_legs_and_total 4. polar_svg_static 5. fresh_run_1 6. fresh_run_2

Setup notes: Use Case Scout batch 10 case k02-polar-vmg-optimizer (offline fixture). Prepared with batch10/prepare.sh; hidden key/tests kept outside the agent's work dir. Prompt = TASK.md verbatim. Scored with the scout's scorer: `python score.py WORKDIR KEYDIR`. Tools: Read/Write/Edit/Glob/Grep/Bash, web disabled. Single run, no retries. Visual output (polar.svg) rendered offline to PNG with google-chrome headless, network blocked, 1280x800 at ~3 s after load. Claude Code's own reported cost for claude-opus-5.5: $0.171976. Score: 6/6. 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.17
Wall time
32s
Human step-ins
0
Turns
6
Model usage
ModelInput tokOutput tokCost
AClaude Opus 5.5anthropic/claude-opus-5.5effort default (no --effort flag) · thinking on83,0863,563$0.17

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. best_upwind_downwind 2. upwind_and_downwind_legs 3. reaching_legs_and_total 4. polar_svg_static 5. fresh_run_1 6. 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": 30690,
  "stop_reason": "end_turn",
  "session_id": "[REDACTED]",
  "total_cost_usd": 0.17197600000000002,
  "usage": {
   "input_tokens": 8,
   "cache_creation_input_tokens": 10778,
   "cache_read_input_tokens": 72300,
   "output_tokens": 3563,
   "output_tokens_details": {
    "thinking_tokens": 190
   },
   "server_tool_use": {
    "web_search_requests": 0,
    "web_fetch_requests": 0
   },
   "service_tier": "standard",
   "cache_creation": {
    "ephemeral_1h_input_tokens": 10778,
    "ephemeral_5m_input_tokens": 0
   },
   "inference_geo": "global",
   "iterations": [
    {
     "input_tokens": 2,
     "output_tokens": 790,
     "cache_read_input_tokens": 22309,
     "cache_creation_input_tokens": 615,
     "cache_creation": {
      "ephemeral_5m_input_tokens": 0,
      "ephemeral_1h_input_tokens": 615
     },
     "type": "message"
    }
   ],
   "speed": "standard",
   "fallback_credit": null
  },
  "modelUsage": {
   "claude-opus-5-5": {
    "inputTokens": 8,
    "outputTokens": 3563,
    "cacheReadInputTokens": 72300,
    "cacheCreationInputTokens": 10778,
    "webSearchRequests": 0,
    "costUSD": 0.17197600000000002,
    "contextWindow": 1000000,
    "maxOutputTokens": 128000,
    "thinkingTokens": 190,
    "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": "I wrote `solve.py`, which uses only the Python standard library. `python solve.py input.json answer.json` ran without errors and wrote `answer.json` and `polar.svg`. I haven't checked these numbers against the hidden answers or any other source; the scripted part of my checking only confirmed that the SVG parses and has the required ids.\n\n**Results for the given input** (true wind speed 17 kn):\n\n| | Course | True wind angle | Boat speed (kn) | Speed toward mark (kn) | Hours |\n|---|---|---|---|---|---|\n| Best upwind | \u2013 | 39\u00b0 | \u2013 | 5.085 (VMG) | \u2013 |\n| Best downwind | \u2013 | 165\u00b0 | \u2013 | 7.385 (VMG) | \u2013 |\n| Leg 0 (upwind) | 49\u00b0 | 39\u00b0 | 6.543 | 5.156 | 1.629 |\n| Leg 1 (downwind) | 61\u00b0 | 165\u00b0 | 7.645 | 7.505 | 1.106 |\n| Leg 2 | 30\u00b0 | 91\u00b0 | 7.983 | 7.972 | 0.665 |\n| Leg 3 | 265\u00b0 | 136\u00b0 | 7.652 | 7.652 | 0.457 |\n\n**Total: 3.857 hours.**\n\n**How it applies the rules:**\n- **Speed lookup:** each table row is interpolated in wind speed first, clamped at the first and last columns. That result is then interpolated across wind angles. Below the first table angle (the no-go zone) speed is 0. Above the last table angle it uses the last row.\n- **Picking the best:** angles and courses are compared on rounded values: 4 decimals for upwind/downwind, 6 for legs. On a tie the smaller angle or course wins, because a candidate only replaces the current best when it is strictly greater.\n- **Hours:** a leg gets `null` hours if its speed toward the mark is zero or less. `total_hours` adds up only the non-null legs.\n\n**The drawing:** `polar.svg` is plain SVG with no scripts, images, links or external assets. It has the `polar-curve` polyline and the two `best-upwind`/`best-downwind` lines drawn from the origin. I removed the font attribute from the title text so a strict \"no fonts\" check can't flag it.\n\nNothing is hard-coded to this input, so new input files go through the same code. Running the script overwrites the `polar.svg` that was already in the folder.",
  "ttft_ms": 2287,
  "type": "result",
  "duration_ms": 31236,
  "uuid": "[REDACTED]",
  "ttft_stream_ms": 1117,
  "time_to_request_ms": 341,
  "first_content_frame_ms": 1117,
  "queued_turn_count": 0,
  "result_index": 0
 }
]

Get new runs and ranking changes weekly