FA-69006 / Tide and marine navigation tables / Open access
Tidal stream diamond table: The half-hour margins of the table are rejected · case 01
Between HW+6 and HW+6.5 no stream is reported although a row applies.
ROOT CAUSE
The window check uses whole hours -6..6 instead of the half-open [-6.5,6.5).
VERIFIED REPAIR
Reject only hrel<-6.5 or hrel>=6.5.
Unsuccessful approach: Using an upper bound of 6 still drops the final half hour.
Case contract
Input [hrel, rng, sr, nr, rows]: hrel is hours relative to standard-port HW; rows lists 13 entries for HW-6..HW+6 as [direction, spring rate, neap rate] in tenths of a knot. The row is chosen by rounding hrel half up (floor(hrel+0.5)); hrel outside [-6.5,6.5) returns None. Rate = neap+(spring-neap)*k with k=(rng-nr)/(sr-nr) (not clamped), converted to knots, floored at zero and rounded to 2 decimals. Return [direction, knots].
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):
hrel,rng,sr,nr,rows=x
if hrel<-6 or hrel>6: return None
i=math.floor(hrel+0.5)+6
d,sp,np_=rows[i]
k=(rng-nr)/(sr-nr)
rate=(np_+(sp-np_)*k)/10
return [d,round(max(rate,0.0),2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-5.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['050', 0.7]), ('tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-4.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['055', 1.05]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [5.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [5.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0]), ('tidal stream diamond table [2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 0.0]), ('tidal stream diamond table [0.2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])]]
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 |
|---|---|---|---|
| tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | None | ['045', 0.3] | Failed |
| tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | None | ['255', 0.2] | Failed |
| tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['050', 0.7] | ['050', 0.7] | Passed |
| tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['055', 1.05] | ['055', 1.05] | Passed |
| tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['060', 1.3] | ['060', 1.3] | Passed |
| tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['070', 0.4] | ['070', 0.4] | Passed |
| tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['slack', 0.0] | ['slack', 0.0] | Passed |
SHA-256 / d1e62ee1309733285ce119d87650fde1a7708ae6ba08ca9e76208412a6778ba4
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
hrel,rng,sr,nr,rows=x
if hrel<-6.5 or hrel>=6: return None
i=math.floor(hrel+0.5)+6
d,sp,np_=rows[i]
k=(rng-nr)/(sr-nr)
rate=(np_+(sp-np_)*k)/10
return [d,round(max(rate,0.0),2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-5.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['050', 0.7]), ('tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-4.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['055', 1.05]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [5.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [5.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0]), ('tidal stream diamond table [2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 0.0]), ('tidal stream diamond table [0.2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])]]
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 |
|---|---|---|---|
| tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['045', 0.3] | ['045', 0.3] | Passed |
| tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | None | ['255', 0.2] | Failed |
| tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['050', 0.7] | ['050', 0.7] | Passed |
| tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['055', 1.05] | ['055', 1.05] | Passed |
| tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['060', 1.3] | ['060', 1.3] | Passed |
| tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['070', 0.4] | ['070', 0.4] | Passed |
| tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['slack', 0.0] | ['slack', 0.0] | Passed |
SHA-256 / 0dbc2569eb0a303d2270a3f0c197d3645412a14a9af2ad9fa497347da34ca7da
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(x):
hrel,rng,sr,nr,rows=x
if hrel<-6.5 or hrel>=6.5: return None
i=math.floor(hrel+0.5)+6
d,sp,np_=rows[i]
k=(rng-nr)/(sr-nr)
rate=(np_+(sp-np_)*k)/10
return [d,round(max(rate,0.0),2)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-5.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['050', 0.7]), ('tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-4.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['055', 1.05]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-2.7, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 1.3]), ('tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-1.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['070', 0.4]), ('tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [0.0, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.0, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0]), ('tidal stream diamond table [0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['230', 0.45]), ('tidal stream diamond table [1.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [1.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 1.0]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35])], [('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [2.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [3.49, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [3.49, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['240', 1.35]), ('tidal stream diamond table [5.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [5.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0])], [('tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.4, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['045', 0.3]), ('tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.2, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['255', 0.2]), ('tidal stream diamond table [6.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [6.5, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-6.6, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-6.6, 3.0, 4.0, 2.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], None), ('tidal stream diamond table [-3, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [-3, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['060', 0.0]), ('tidal stream diamond table [2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['235', 0.0]), ('tidal stream diamond table [0.2, 0.8, 4.0, 3.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]]', [0.2, 0.8, 4.0, 3.0, [['045', 4, 2], ['050', 9, 5], ['055', 14, 7], ['060', 17, 9], ['060', 12, 6], ['070', 5, 3], ['slack', 0, 0], ['230', 6, 3], ['235', 13, 7], ['240', 18, 9], ['245', 15, 8], ['250', 9, 4], ['255', 3, 1]]], ['slack', 0.0])]]
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 |
|---|---|---|---|
| tidal stream diamond table [-6.4, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['045', 0.3] | ['045', 0.3] | Passed |
| tidal stream diamond table [6.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['255', 0.2] | ['255', 0.2] | Passed |
| tidal stream diamond table [-5.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['050', 0.7] | ['050', 0.7] | Passed |
| tidal stream diamond table [-4.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['055', 1.05] | ['055', 1.05] | Passed |
| tidal stream diamond table [-2.7, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['060', 1.3] | ['060', 1.3] | Passed |
| tidal stream diamond table [-1.2, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['070', 0.4] | ['070', 0.4] | Passed |
| tidal stream diamond table [-0.5, 3.0, 4.0, 2.0, [["045", 4, 2], ["050", 9, 5], ["055", 14, 7], ["060", 17, 9], ["060", 12, 6], ["070", 5, 3], ["slack", 0, 0], ["230", 6, 3], ["235", 13, 7], ["240", 18, 9], ["245", 15, 8], ["250", 9, 4], ["255", 3, 1]]] | ['slack', 0.0] | ['slack', 0.0] | Passed |
SHA-256 / 09e29ee5d50a39d88ba6369f73c0167ac50b7c054e6692b521ee38c8f5b62ef2
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:07.453768+00:00.
Case digest / 7372b6bcfd03155f1051d8c646bb4a02db962b7ec2b3c61737eed8c96ad18033