FA-68996 / Tide and marine navigation tables / Open access
Tidal stream diamond table: Hours before HW index the table from its end · case 01
Before high water the ebb rows are returned for the flood.
ROOT CAUSE
The HW-6 offset is not added, so negative hours use negative Python indexes.
VERIFIED REPAIR
Add six so HW-6 maps to the first row.
Unsuccessful approach: Indexing by the absolute hour makes HW-3 and HW+3 identical.
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.5 or hrel>=6.5: return None
i=math.floor(hrel+0.5)
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 [-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 [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 [-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 [-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 [-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 [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 [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 [-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 [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.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 [-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 [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])]]
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]]] | ['230', 0.45] | ['045', 0.3] | 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]]] | ['235', 1.0] | ['050', 0.7] | Failed |
| 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]]] | ['240', 1.35] | ['055', 1.05] | Failed |
| 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]]] | ['245', 1.15] | ['060', 1.3] | Failed |
| 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]]] | ['255', 0.2] | ['070', 0.4] | Failed |
| 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]]] | ['045', 0.3] | ['slack', 0.0] | Failed |
| 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]]] | ['045', 0.3] | ['slack', 0.0] | Failed |
SHA-256 / 91ee1d9ac59894b29d1bdda68128dc1cb081de63afa0ec7974c275b9bf1f69df
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.5: return None
i=abs(math.floor(hrel+0.5))
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 [-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 [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 [-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 [-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 [-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 [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 [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 [-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 [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.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 [-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 [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])]]
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]]] | ['slack', 0.0] | ['045', 0.3] | 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]]] | ['070', 0.4] | ['050', 0.7] | Failed |
| 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]]] | ['060', 0.9] | ['055', 1.05] | Failed |
| 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]]] | ['050', 0.7] | ['070', 0.4] | Failed |
| 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]]] | ['045', 0.3] | ['slack', 0.0] | Failed |
| 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]]] | ['045', 0.3] | ['slack', 0.0] | Failed |
SHA-256 / 424c54f939b2e590923d9c54db29dc4dd5e6a2eb3ff2ff834b55427d0240aa96
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 [-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 [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 [-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 [-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 [-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 [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 [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 [-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 [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.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 [-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 [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])]]
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 [-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 |
| 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]]] | ['slack', 0.0] | ['slack', 0.0] | Passed |
SHA-256 / 1110e76c94e17270b67b76dbbdd47f925f510a863d402bf6a3a65fc9ffe607e3
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.410145+00:00.
Case digest / 0e3bca85344d45c13c5ea72d25e12157ebdbc1aacf9ec2453f3be19ef1ccf446