FAILURE MAP
← Case archive

FA-68526 / Toll and parking fee computation / Open access

Axle and height vehicle classification: the oversize surcharge ignores trailer axles · case 01

Axle and height vehicle classification returns a wrong result when the oversize surcharge ignores trailer axles.

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

ROOT CAUSE

The surcharge is charged once instead of per axle.

VERIFIED REPAIR

Restore the oversize surcharge basis rule so that the step reads `x['oversize_fee'] * total`.

Unsuccessful approach: Counting only the power unit axles undercharges oversize combinations.

Case contract

Input {axles, trailer_axles, height_cm, dual_tires, motorcycle, tolls: [[class, cents]], oversize_fee}. A two-axle motorcycle without trailer is class M. Otherwise total axles = vehicle + trailer: up to two axles is class 1 when under 200 cm and without dual tires, else class 2; three or more is the axle count, capped at 5. Vehicles 410 cm or taller pay oversize_fee per total axle. Return [class, cents].

Why this case matters

Fee engines bill customers in integer cents; a wrong boundary, rounding stage or cap scope silently over- or under-charges.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    total = x['axles'] + x['trailer_axles']
    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:
        cls = 'M'
    elif total <= 2:
        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'
    else:
        cls = str(min(total, 5))
    toll = dict(x['tolls'])[cls]
    if x['height_cm'] >= 410:
        toll += x['oversize_fee']
    return [cls, toll]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'axles': 2, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 6, 'trailer_axles': 0, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2750]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 400, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 3, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 1150]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['1', 300]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 2, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 6, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2600])], [({'axles': 4, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1750]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 1, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0['M', 150]['M', 150]Passed
fee oracle 1['5', 1500]['5', 2750]Failed
fee oracle 2['3', 700]['3', 700]Passed
fee oracle 3['2', 450]['2', 450]Passed
fee oracle 4['3', 700]['3', 700]Passed
fee oracle 5['5', 1500]['5', 2500]Failed
fee oracle 6['5', 1400]['5', 2000]Failed
fee oracle 7['2', 600]['2', 750]Failed

SHA-256 / 50f13b3017f3ed2dae4bbbb50b9a2359539e25074d06f2e1e94def351c375498

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    total = x['axles'] + x['trailer_axles']
    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:
        cls = 'M'
    elif total <= 2:
        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'
    else:
        cls = str(min(total, 5))
    toll = dict(x['tolls'])[cls]
    if x['height_cm'] >= 410:
        toll += x['oversize_fee'] * x['axles']
    return [cls, toll]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'axles': 2, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 6, 'trailer_axles': 0, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2750]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 400, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 3, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 1150]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['1', 300]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 2, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 6, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2600])], [({'axles': 4, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1750]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 1, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0['M', 150]['M', 150]Passed
fee oracle 1['5', 2750]['5', 2750]Passed
fee oracle 2['3', 700]['3', 700]Passed
fee oracle 3['2', 450]['2', 450]Passed
fee oracle 4['3', 700]['3', 700]Passed
fee oracle 5['5', 1750]['5', 2500]Failed
fee oracle 6['5', 1550]['5', 2000]Failed
fee oracle 7['2', 750]['2', 750]Passed

SHA-256 / fbf109b0cdaaec09e908f80afae1d08bff05df1b91c513224dbdefa8186bbfe6

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    total = x['axles'] + x['trailer_axles']
    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:
        cls = 'M'
    elif total <= 2:
        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'
    else:
        cls = str(min(total, 5))
    toll = dict(x['tolls'])[cls]
    if x['height_cm'] >= 410:
        toll += x['oversize_fee'] * total
    return [cls, toll]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'axles': 2, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 6, 'trailer_axles': 0, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2750]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 280, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 400, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 3, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 1150]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['1', 300]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 2, 'height_cm': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 190, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 6, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2600])], [({'axles': 4, 'trailer_axles': 1, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1750]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 5, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['5', 1250]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['M', 150]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 410, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['3', 700]), ({'axles': 2, 'trailer_axles': 0, 'height_cm': 420, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['2', 750])], [({'axles': 2, 'trailer_axles': 0, 'height_cm': 180, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['2', 450]), ({'axles': 2, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2150]), ({'axles': 4, 'trailer_axles': 0, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 3, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['5', 2000]), ({'axles': 4, 'trailer_axles': 1, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 1250]), ({'axles': 3, 'trailer_axles': 0, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'axles': 3, 'trailer_axles': 1, 'height_cm': 199, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])]]
for i, (args, expected) in enumerate(fixtures[N-1]):
    check('fee oracle' + ' %d' % i, 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
fee oracle 0['M', 150]['M', 150]Passed
fee oracle 1['5', 2750]['5', 2750]Passed
fee oracle 2['3', 700]['3', 700]Passed
fee oracle 3['2', 450]['2', 450]Passed
fee oracle 4['3', 700]['3', 700]Passed
fee oracle 5['5', 2500]['5', 2500]Passed
fee oracle 6['5', 2000]['5', 2000]Passed
fee oracle 7['2', 750]['2', 750]Passed

SHA-256 / bac4c534e776c468c5313465dd970f949018854eadda3047472201ceeba439fb

Verification & scope

A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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:02.988640+00:00.

Case digest / 50eb17d1ec1c3b679e826a0d8762627597fc6dc0cef0e15439c3c2d11022ef86