FAILURE MAP
← Case archive

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

Axle and height vehicle classification: a motorcycle towing a trailer stays in class M · case 01

Axle and height vehicle classification returns a wrong result when a motorcycle towing a trailer stays in class M.

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

ROOT CAUSE

The motorcycle flag alone selects class M, so motorcycle-plus-trailer combinations pay the lowest toll.

VERIFIED REPAIR

Restore the motorcycle class rule so that the step reads `x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0`.

Unsuccessful approach: Checking the vehicle axles still ignores the trailer axles.

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']:
        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': 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': 5, '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': 100}, ['5', 1750]), ({'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': 199, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'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': 4, 'trailer_axles': 0, 'height_cm': 400, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950])], [({'axles': 2, '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}, ['2', 750]), ({'axles': 5, 'trailer_axles': 0, 'height_cm': 400, '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': 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': 2, 'trailer_axles': 1, 'height_cm': 210, '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': 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': 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': 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': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500])], [({'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': 2, 'height_cm': 190, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 1, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'axles': 4, '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}, ['5', 1250]), ({'axles': 4, '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': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 1350])], [({'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': 2, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 4, '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': 250}, ['4', 950]), ({'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': 2, 'height_cm': 190, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 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': 2, 'height_cm': 409, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])], [({'axles': 5, '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', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 200, 'dual_tires': False, 'motorcycle': True, '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': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'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': 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': 6, 'trailer_axles': 1, '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', 2300]), ({'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': 250}, ['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])]]
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['2', 750]['2', 750]Passed
fee oracle 1['5', 1750]['5', 1750]Passed
fee oracle 2['2', 450]['2', 450]Passed
fee oracle 3['3', 700]['3', 700]Passed
fee oracle 4['M', 150]['3', 700]Failed
fee oracle 5['4', 950]['4', 950]Passed
fee oracle 6['M', 1150]['4', 1950]Failed
fee oracle 7['M', 150]['4', 950]Failed

SHA-256 / 56ccd121c45f77cde96533d041f8cb8be842b38879fff0f779425aa53d4bc55f

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:
        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': 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': 5, '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': 100}, ['5', 1750]), ({'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': 199, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'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': 4, 'trailer_axles': 0, 'height_cm': 400, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950])], [({'axles': 2, '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}, ['2', 750]), ({'axles': 5, 'trailer_axles': 0, 'height_cm': 400, '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': 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': 2, 'trailer_axles': 1, 'height_cm': 210, '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': 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': 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': 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': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500])], [({'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': 2, 'height_cm': 190, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 1, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'axles': 4, '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}, ['5', 1250]), ({'axles': 4, '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': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 1350])], [({'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': 2, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 4, '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': 250}, ['4', 950]), ({'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': 2, 'height_cm': 190, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 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': 2, 'height_cm': 409, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])], [({'axles': 5, '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', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 200, 'dual_tires': False, 'motorcycle': True, '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': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'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': 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': 6, 'trailer_axles': 1, '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', 2300]), ({'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': 250}, ['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])]]
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['2', 750]['2', 750]Passed
fee oracle 1['5', 1750]['5', 1750]Passed
fee oracle 2['2', 450]['2', 450]Passed
fee oracle 3['3', 700]['3', 700]Passed
fee oracle 4['M', 150]['3', 700]Failed
fee oracle 5['4', 950]['4', 950]Passed
fee oracle 6['M', 1150]['4', 1950]Failed
fee oracle 7['M', 150]['4', 950]Failed

SHA-256 / 97175d5f127a68f5e05b2ef7b6ec8818c0fb39ed5f7cbfeb2f745d17bf57abf7

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': 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': 5, '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': 100}, ['5', 1750]), ({'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': 199, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'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': 4, 'trailer_axles': 0, 'height_cm': 400, 'dual_tires': True, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['4', 1950]), ({'axles': 2, 'trailer_axles': 2, 'height_cm': 150, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950])], [({'axles': 2, '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}, ['2', 750]), ({'axles': 5, 'trailer_axles': 0, 'height_cm': 400, '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': 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': 2, 'trailer_axles': 1, 'height_cm': 210, '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': 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': 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': 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': 3, 'height_cm': 430, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['5', 2500])], [({'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': 2, 'height_cm': 190, 'dual_tires': True, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 1, 'height_cm': 409, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 250}, ['3', 700]), ({'axles': 4, '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}, ['5', 1250]), ({'axles': 4, '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': 2, 'trailer_axles': 2, 'height_cm': 410, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 1350])], [({'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': 2, 'height_cm': 150, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950]), ({'axles': 4, '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': 250}, ['4', 950]), ({'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': 2, 'height_cm': 190, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['4', 950]), ({'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': 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': 2, 'height_cm': 409, 'dual_tires': False, 'motorcycle': True, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 150}, ['4', 950])], [({'axles': 5, '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', 2500]), ({'axles': 2, 'trailer_axles': 3, 'height_cm': 200, 'dual_tires': False, 'motorcycle': True, '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': 210, 'dual_tires': False, 'motorcycle': False, 'tolls': [['M', 150], ['1', 300], ['2', 450], ['3', 700], ['4', 950], ['5', 1250]], 'oversize_fee': 100}, ['3', 700]), ({'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': 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': 6, 'trailer_axles': 1, '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', 2300]), ({'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': 250}, ['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])]]
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['2', 750]['2', 750]Passed
fee oracle 1['5', 1750]['5', 1750]Passed
fee oracle 2['2', 450]['2', 450]Passed
fee oracle 3['3', 700]['3', 700]Passed
fee oracle 4['3', 700]['3', 700]Passed
fee oracle 5['4', 950]['4', 950]Passed
fee oracle 6['4', 1950]['4', 1950]Passed
fee oracle 7['4', 950]['4', 950]Passed

SHA-256 / 57306336d84daf5a1e05753cb00f2dcea5a710279b0dbba2a34ffb3d05c161c1

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.857093+00:00.

Case digest / 4aa69c8ad8106d69a04f501675648c5a9fb206b06d2539c73b458707bbc6f513