FAILURE MAP
← Case archive

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.

Verified by executionVariant 1 · 7 checks per implementationDownload source bundle ↓JSON ↗

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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