FA-95401 / Shipping rate zone lookup / Open access
Rate table: weight on bracket edge bumped up · case 01
A 2 lb parcel is charged the 5 lb bracket rate.
ROOT CAUSE
The bracket test excludes the bracket maximum.
VERIFIED REPAIR
Use the first bracket whose maximum is at least the billed weight.
Unsuccessful approach: Scanning brackets from the heaviest returns the top bracket for every in-table weight.
Case contract
rows [[max_lb, [cents for zones 2..8]]] ascending; weight is rounded up to whole lb (minimum 1) and uses the first row with max_lb >= weight. Zone 1 is billed as zone 2; zones outside 1-8 -> "NO_RATE"; a None cell -> "NO_RATE". Above the last row: last row rate + (lb over last max) * over[zone].
Why this case matters
Zone rate tables convert billable weight and zone into a base charge.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(weight, zone, rows, over):
if zone < 1 or zone > 8:
return 'NO_RATE'
w = max(1, math.ceil(weight))
col = max(zone, 2) - 2
for max_lb, rates in rows:
if w < max_lb:
r = rates[col]
return r if r is not None else 'NO_RATE'
last_lb, last_rates = rows[-1]
return last_rates[col] + (w - last_lb) * over[col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 8', [10, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2000]], [['generated mix 12', [1, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 4', [5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 10', [0.3, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 19', [1, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800]], [['generated mix 38', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 14', [1, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 21', [1.5, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1250], ['generated mix 29', [5.5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2800]], [['generated mix 53', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 26', [2.01, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 32', [3, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]], [['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 43', [0.3, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 51', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 59', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]]]
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 |
|---|---|---|---|
| bracket edge | 1200 | 960 | Failed |
| fraction up | 1100 | 900 | Failed |
| zone 1 as 2 | 900 | 800 | Failed |
| fraction over table | 1600 | 1600 | Passed |
| bad zone | NO_RATE | NO_RATE | Passed |
| over table | 2280 | 2280 | Passed |
| unavailable cell | NO_RATE | NO_RATE | Passed |
| generated mix 8 | 2000 | 2000 | Passed |
SHA-256 / 9cfa90f72364b18ed978c298835329d5b6adfe6d9e3a7ba5561fa1aaaa58b888
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(weight, zone, rows, over):
if zone < 1 or zone > 8:
return 'NO_RATE'
w = max(1, math.ceil(weight))
col = max(zone, 2) - 2
for max_lb, rates in reversed(rows):
if w <= max_lb:
r = rates[col]
return r if r is not None else 'NO_RATE'
last_lb, last_rates = rows[-1]
return last_rates[col] + (w - last_lb) * over[col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 8', [10, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2000]], [['generated mix 12', [1, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 4', [5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 10', [0.3, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 19', [1, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800]], [['generated mix 38', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 14', [1, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 21', [1.5, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1250], ['generated mix 29', [5.5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2800]], [['generated mix 53', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 26', [2.01, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 32', [3, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]], [['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 43', [0.3, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 51', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 59', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]]]
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 |
|---|---|---|---|
| bracket edge | 1650 | 960 | Failed |
| fraction up | 1500 | 900 | Failed |
| zone 1 as 2 | 1500 | 800 | Failed |
| fraction over table | 1600 | 1600 | Passed |
| bad zone | NO_RATE | NO_RATE | Passed |
| over table | 2280 | 2280 | Passed |
| unavailable cell | 2800 | NO_RATE | Failed |
| generated mix 8 | 2000 | 2000 | Passed |
SHA-256 / 8b1338a9dcd177da590dcd2555cdab73e028fb66c021aac5a0647b2bb2348aba
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(weight, zone, rows, over):
if zone < 1 or zone > 8:
return 'NO_RATE'
w = max(1, math.ceil(weight))
col = max(zone, 2) - 2
for max_lb, rates in rows:
if w <= max_lb:
r = rates[col]
return r if r is not None else 'NO_RATE'
last_lb, last_rates = rows[-1]
return last_rates[col] + (w - last_lb) * over[col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 8', [10, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2000]], [['generated mix 12', [1, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 4', [5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 10', [0.3, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1200], ['generated mix 19', [1, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800]], [['generated mix 38', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 14', [1, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 21', [1.5, 7, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1250], ['generated mix 29', [5.5, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2800]], [['generated mix 53', [2, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 26', [2.01, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['zone 1 as 2', [1, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['fraction over table', [10.2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1600], ['bad zone', [4, 9, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 32', [3, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 1100], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]], [['bracket edge', [2, 3, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 960], ['generated mix 40', [1.5, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['fraction up', [1.5, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['over table', [12, 5, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 2280], ['unavailable cell', [4, 8, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 'NO_RATE'], ['generated mix 43', [0.3, 1, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 800], ['generated mix 51', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900], ['generated mix 59', [2, 2, [[1, [800, 850, 900, 950, 1000, 1100, 1200]], [2, [900, 960, 1020, 1080, 1140, 1250, 1400]], [5, [1100, 1200, 1300, 1400, 1500, 1650, None]], [10, [1500, 1650, 1800, 2000, 2200, 2450, 2800]]], [100, 110, 120, 140, 160, 180, 210]], 900]]]
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 |
|---|---|---|---|
| bracket edge | 960 | 960 | Passed |
| fraction up | 900 | 900 | Passed |
| zone 1 as 2 | 800 | 800 | Passed |
| fraction over table | 1600 | 1600 | Passed |
| bad zone | NO_RATE | NO_RATE | Passed |
| over table | 2280 | 2280 | Passed |
| unavailable cell | NO_RATE | NO_RATE | Passed |
| generated mix 8 | 2000 | 2000 | Passed |
SHA-256 / 53717e46b0be19491d97339f02b131aad5f8043574b7278a07d6b656984c1496
Verification & scope
Stipulated table layout and increments. 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:52:13.337498+00:00.
Case digest / 30e05a9945ced7ca8b2a7be81cd2922773e44e2c2a026261983f4b57f7c429bf