FA-69321 / Tide and marine navigation tables / Open access
Anchor rode and swing radius: Bow roller height is left out of the scope · case 01
Scope ratios are computed on water depth only.
ROOT CAUSE
The height of the bow roller above the water is omitted from the scope depth.
VERIFIED REPAIR
Include bow height before multiplying by scope.
Unsuccessful approach: Adding bow height after the scope multiplication undercounts it.
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)
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 [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 [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 [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 [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 [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 [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, 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])]]
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] | [40, 50.6] | [45, 55.6] | Failed |
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11] | [30, 40.4] | [35, 45.5] | Failed |
| anchor rode and swing radius [8.0, 5.1, 0.3, 1.5, 3, 14] | [40, 52.8] | [45, 57.9] | Failed |
| anchor rode and swing radius [2.5, 1.0, 0.2, 1.0, 7, 9] | [25, 33.7] | [35, 43.8] | Failed |
| anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10] | [30, 39.4] | [35, 44.5] | Failed |
| anchor rode and swing radius [6.0, 2.0, 2.0, 1.0, 5, 12] | [40, 51.0] | [45, 56.1] | Failed |
| anchor rode and swing radius [3.0, 4.0, 1.0, 1.5, 5, 8] | [35, 42.6] | [45, 52.7] | Failed |
SHA-256 / b77e896b56b4edc517828158e5cc5334c27e35e4c770c47f861a9b645427b151
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
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 [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 [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 [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 [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 [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 [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, 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])]]
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] | [40, 50.6] | [45, 55.6] | Failed |
| anchor rode and swing radius [4.0, 3.2, 0.6, 1.2, 4, 11] | [30, 40.4] | [35, 45.5] | Failed |
| 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] | [30, 38.8] | [35, 43.8] | Failed |
| anchor rode and swing radius [4.2, 1.4, 0.4, 1.4, 5, 10] | [30, 39.4] | [35, 44.5] | Failed |
| 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] | [40, 47.6] | [45, 52.7] | Failed |
SHA-256 / ef401f0c25d1ad05d2bda07946d5051fb1c6b7f06722f993411b708fef9df588
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 [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 [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 [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 [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 [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 [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, 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])]]
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 / 0ebbc9b836824eb3aadd7cf970014514d5b794e4c4874e3d916a9590e8c88f18
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.272400+00:00.
Case digest / 6ee67f93864eba9dc1524c78587a3567517b06da7d13b18f42694094f7beae8c