FA-69336 / Tide and marine navigation tables / Open access
Anchor rode and swing radius: Swing radius stops at the bow · case 01
The stern swings outside the planned circle.
ROOT CAUSE
The boat length is not added to the horizontal rode extent.
VERIFIED REPAIR
Add the full boat length.
Unsuccessful approach: Adding half the boat length models a pivot at midships, not at the bow.
Case contract
Input [depth, tmax, tmin, bow, scope, boat_len]: charted depth and tide heights above datum (m). Rode = scope*(depth+tmax+bow) rounded up to the next 5 m chain mark. Swing radius = sqrt(rode^2 - (depth+tmin+bow)^2) + boat_len (largest at the lowest tide), rounded to 0.1 m. Return [rode, radius].
Why this case matters
Tide tables and passage plans turn published predictions into go/no-go decisions about depth, clearance and timing.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
d,tmax,tmin,bow,scope,blen=x
L=scope*(d+tmax+bow)
L=math.ceil(L/5-1e-9)*5
v=d+tmin+bow
r=math.sqrt(L*L-v*v)
return [L,round(r,1)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])], [('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5])], [('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9])], [('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9])], [('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11] | [45, 44.6] | [45, 55.6] | Failed |
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11] | [35, 34.5] | [35, 45.5] | Failed |
| anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14] | [45, 43.9] | [45, 57.9] | Failed |
| anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9] | [35, 34.8] | [35, 43.8] | Failed |
| anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10] | [35, 34.5] | [35, 44.5] | Failed |
| anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12] | [45, 44.1] | [45, 56.1] | Failed |
| anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8] | [45, 44.7] | [45, 52.7] | Failed |
SHA-256 / a76a257948d946cf068057a536e06eb57f566c4a4132e6d2ad9c4706caa1254a
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
d,tmax,tmin,bow,scope,blen=x
L=scope*(d+tmax+bow)
L=math.ceil(L/5-1e-9)*5
v=d+tmin+bow
r=math.sqrt(L*L-v*v)+blen/2
return [L,round(r,1)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])], [('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5])], [('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9])], [('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9])], [('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11] | [45, 50.1] | [45, 55.6] | Failed |
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11] | [35, 40.0] | [35, 45.5] | Failed |
| anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14] | [45, 50.9] | [45, 57.9] | Failed |
| anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9] | [35, 39.3] | [35, 43.8] | Failed |
| anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10] | [35, 39.5] | [35, 44.5] | Failed |
| anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12] | [45, 50.1] | [45, 56.1] | Failed |
| anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8] | [45, 48.7] | [45, 52.7] | Failed |
SHA-256 / 3656c679cb812e7448b49ce64f842e87c67a4c137a867b6fd73fb2a3425786c0
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
d,tmax,tmin,bow,scope,blen=x
L=scope*(d+tmax+bow)
L=math.ceil(L/5-1e-9)*5
v=d+tmin+bow
r=math.sqrt(L*L-v*v)+blen
return [L,round(r,1)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])], [('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5])], [('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7]), ('anchor rode and swing radius [10.0, 0.5, 0.1, 2.0, 4, 20]', [10.0, 0.5, 0.1, 2.0, 4, 20], [50, 68.5]), ('anchor rode and swing radius [5.0, 1.0, 0.5, 1.0, 6, 10]', [5.0, 1.0, 0.5, 1.0, 6, 10], [45, 54.5]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9])], [('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [2.0, 0.5, 0.5, 1.0, 7, 7]', [2.0, 0.5, 0.5, 1.0, 7, 7], [25, 31.8]), ('anchor rode and swing radius [4.2, 2.1, 1.0, 1.2, 4, 10]', [4.2, 2.1, 1.0, 1.2, 4, 10], [30, 39.3]), ('anchor rode and swing radius [1.1, 1.3, 0.4, 0.6, 5, 6]', [1.1, 1.3, 0.4, 0.6, 5, 6], [15, 20.9]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9])], [('anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10]', [4.2, 1.4, 0.4, 1.4, 5, 10], [35, 44.5]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11]', [4.0, 3.2, 0.6, 1.2, 5, 11], [45, 55.6]), ('anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11]', [4.0, 3.2, 0.6, 1.2, 4, 11], [35, 45.5]), ('anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14]', [8.0, 5.1, 0.3, 1.5, 3, 14], [45, 57.9]), ('anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9]', [2.5, 1.0, 0.2, 1.0, 7, 9], [35, 43.8]), ('anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12]', [6.0, 2.0, 2.0, 1.0, 5, 12], [45, 56.1]), ('anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8]', [3.0, 4.0, 1.0, 1.5, 5, 8], [45, 52.7])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 5, 11] | [45, 55.6] | [45, 55.6] | Passed |
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11] | [35, 45.5] | [35, 45.5] | Passed |
| anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14] | [45, 57.9] | [45, 57.9] | Passed |
| anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9] | [35, 43.8] | [35, 43.8] | Passed |
| anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10] | [35, 44.5] | [35, 44.5] | Passed |
| anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12] | [45, 56.1] | [45, 56.1] | Passed |
| anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8] | [45, 52.7] | [45, 52.7] | Passed |
SHA-256 / 7d9ff45cc44f406a773226d748a237bc2f27ef7ffc2dd9700df8d059db193780
Verification & scope
A deterministic toy model with stipulated rules and constants; not certified hydrographic software or a substitute for official tide tables. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:48:10.569448+00:00.
Case digest / 12f147e7322c52bb255ee77477f293af9b8fe432ee17e8d3bc6db800bfbce1a7