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.
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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| 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