{"abstract":"Axle and height vehicle classification returns a wrong result when the oversize surcharge ignores trailer axles.","category":"Toll and parking fee computation","checks":8,"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].","evaluation_group":"w2-toll_and_parking_fee_computation-axle-class","failed_approach":"Counting only the power unit axles undercharges oversize combinations.","family":"w2-toll_and_parking_fee_computation-axle-class-oversize-axles","id":"FA-68526","implementations":{"attempt":{"sha256":"fbf109b0cdaaec09e908f80afae1d08bff05df1b91c513224dbdefa8186bbfe6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = x['axles'] + x['trailer_axles']\n    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:\n        cls = 'M'\n    elif total <= 2:\n        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'\n    else:\n        cls = str(min(total, 5))\n    toll = dict(x['tolls'])[cls]\n    if x['height_cm'] >= 410:\n        toll += x['oversize_fee'] * x['axles']\n    return [cls, toll]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'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])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"50f13b3017f3ed2dae4bbbb50b9a2359539e25074d06f2e1e94def351c375498","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = x['axles'] + x['trailer_axles']\n    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:\n        cls = 'M'\n    elif total <= 2:\n        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'\n    else:\n        cls = str(min(total, 5))\n    toll = dict(x['tolls'])[cls]\n    if x['height_cm'] >= 410:\n        toll += x['oversize_fee']\n    return [cls, toll]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'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])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"bac4c534e776c468c5313465dd970f949018854eadda3047472201ceeba439fb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    total = x['axles'] + x['trailer_axles']\n    if x['motorcycle'] and x['axles'] == 2 and x['trailer_axles'] == 0:\n        cls = 'M'\n    elif total <= 2:\n        cls = '1' if x['height_cm'] < 200 and not x['dual_tires'] else '2'\n    else:\n        cls = str(min(total, 5))\n    toll = dict(x['tolls'])[cls]\n    if x['height_cm'] >= 410:\n        toll += x['oversize_fee'] * total\n    return [cls, toll]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'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])]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check('fee oracle' + ' %d' % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-toll_and_parking_fee_computation-axle-class-oversize-axles","generated_at":"2026-09-29T14:48:02.988640+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Fee engines bill customers in integer cents; a wrong boundary, rounding stage or cap scope silently over- or under-charges.","repair":"Restore the oversize surcharge basis rule so that the step reads `x['oversize_fee'] * total`.","root_cause":"The surcharge is charged once instead of per axle.","sha256":"50eb17d1ec1c3b679e826a0d8762627597fc6dc0cef0e15439c3c2d11022ef86","title":"Axle and height vehicle classification: the oversize surcharge ignores trailer axles · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.296,"exit_code":1,"observations":[{"actual":["M",150],"check":"fee oracle 0","expected":["M",150],"passed":true},{"actual":["5",2750],"check":"fee oracle 1","expected":["5",2750],"passed":true},{"actual":["3",700],"check":"fee oracle 2","expected":["3",700],"passed":true},{"actual":["2",450],"check":"fee oracle 3","expected":["2",450],"passed":true},{"actual":["3",700],"check":"fee oracle 4","expected":["3",700],"passed":true},{"actual":["5",1750],"check":"fee oracle 5","expected":["5",2500],"passed":false},{"actual":["5",1550],"check":"fee oracle 6","expected":["5",2000],"passed":false},{"actual":["2",750],"check":"fee oracle 7","expected":["2",750],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": [\"M\", 150], \"expected\": [\"M\", 150], \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": [\"5\", 2750], \"expected\": [\"5\", 2750], \"passed\": true}, {\"check\": \"fee oracle 2\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": [\"2\", 450], \"expected\": [\"2\", 450], \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": [\"5\", 1750], \"expected\": [\"5\", 2500], \"passed\": false}, {\"check\": \"fee oracle 6\", \"actual\": [\"5\", 1550], \"expected\": [\"5\", 2000], \"passed\": false}, {\"check\": \"fee oracle 7\", \"actual\": [\"2\", 750], \"expected\": [\"2\", 750], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.356,"exit_code":1,"observations":[{"actual":["M",150],"check":"fee oracle 0","expected":["M",150],"passed":true},{"actual":["5",1500],"check":"fee oracle 1","expected":["5",2750],"passed":false},{"actual":["3",700],"check":"fee oracle 2","expected":["3",700],"passed":true},{"actual":["2",450],"check":"fee oracle 3","expected":["2",450],"passed":true},{"actual":["3",700],"check":"fee oracle 4","expected":["3",700],"passed":true},{"actual":["5",1500],"check":"fee oracle 5","expected":["5",2500],"passed":false},{"actual":["5",1400],"check":"fee oracle 6","expected":["5",2000],"passed":false},{"actual":["2",600],"check":"fee oracle 7","expected":["2",750],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": [\"M\", 150], \"expected\": [\"M\", 150], \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": [\"5\", 1500], \"expected\": [\"5\", 2750], \"passed\": false}, {\"check\": \"fee oracle 2\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": [\"2\", 450], \"expected\": [\"2\", 450], \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": [\"5\", 1500], \"expected\": [\"5\", 2500], \"passed\": false}, {\"check\": \"fee oracle 6\", \"actual\": [\"5\", 1400], \"expected\": [\"5\", 2000], \"passed\": false}, {\"check\": \"fee oracle 7\", \"actual\": [\"2\", 600], \"expected\": [\"2\", 750], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.052,"exit_code":0,"observations":[{"actual":["M",150],"check":"fee oracle 0","expected":["M",150],"passed":true},{"actual":["5",2750],"check":"fee oracle 1","expected":["5",2750],"passed":true},{"actual":["3",700],"check":"fee oracle 2","expected":["3",700],"passed":true},{"actual":["2",450],"check":"fee oracle 3","expected":["2",450],"passed":true},{"actual":["3",700],"check":"fee oracle 4","expected":["3",700],"passed":true},{"actual":["5",2500],"check":"fee oracle 5","expected":["5",2500],"passed":true},{"actual":["5",2000],"check":"fee oracle 6","expected":["5",2000],"passed":true},{"actual":["2",750],"check":"fee oracle 7","expected":["2",750],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": [\"M\", 150], \"expected\": [\"M\", 150], \"passed\": true}, {\"check\": \"fee oracle 1\", \"actual\": [\"5\", 2750], \"expected\": [\"5\", 2750], \"passed\": true}, {\"check\": \"fee oracle 2\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": [\"2\", 450], \"expected\": [\"2\", 450], \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": [\"3\", 700], \"expected\": [\"3\", 700], \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": [\"5\", 2500], \"expected\": [\"5\", 2500], \"passed\": true}, {\"check\": \"fee oracle 6\", \"actual\": [\"5\", 2000], \"expected\": [\"5\", 2000], \"passed\": true}, {\"check\": \"fee oracle 7\", \"actual\": [\"2\", 750], \"expected\": [\"2\", 750], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}