{"abstract":"Closed-system distance toll returns a wrong result when the exit kilometre marker is charged instead of the distance.","category":"Toll and parking fee computation","checks":8,"contract":"Input {plazas: [[name, km]], entry (null = lost ticket), exit, class_pct, vclass, rate_milli (milli-cents per km), min_toll, uturn_fee}. Entry equal to exit pays uturn_fee. A lost ticket is charged from the plaza farthest from the exit. raw = km distance * rate * class percent / 100 (milli-cents, floored); the toll is raw rounded half-up to the nearest 5 cents, at least min_toll.","contract_signature":"x","evaluation_group":"w2-toll_and_parking_fee_computation-closed-distance-toll","failed_approach":"Charging the larger kilometre marker bills the distance from the road origin.","family":"w2-toll_and_parking_fee_computation-closed-distance-toll-distance","id":"FA-68486","implementations":{"attempt":{"sha256":"fe3c7f1af416e6d9bc1e87d24d2e276c34c65fcf1c5e862f43a49f9256126127","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    km = dict(x['plazas'])\n    ex = km[x['exit']]\n    if x['entry'] is None:\n        dist = max(abs(ex - k) for k in km.values())\n    elif x['entry'] == x['exit']:\n        return x['uturn_fee']\n    else:\n        dist = max(ex, km[x['entry']])\n    mult = dict(x['class_pct'])[x['vclass']]\n    raw = dist * x['rate_milli'] * mult // 100\n    toll = (raw + 2500) // 5000 * 5\n    return max(toll, x['min_toll'])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'plazas': [['P0', 10], ['P1', 169], ['P2', 197]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 200}, 390), ({'plazas': [['P0', 86], ['P1', 155], ['P2', 191]], 'entry': 'P2', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 1830), ({'plazas': [['P0', 7], ['P1', 79], ['P2', 125], ['P3', 144]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 200), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 50], ['P1', 108], ['P2', 149], ['P3', 150], ['P4', 171]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 200}, 150), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 76], ['P1', 80], ['P2', 135], ['P3', 187]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 47], ['P1', 85], ['P2', 102], ['P3', 121]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 200}, 200)], [({'plazas': [['P0', 22], ['P1', 66], ['P2', 137], ['P3', 194]], 'entry': 'P1', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 1730), ({'plazas': [['P0', 34], ['P1', 53], ['P2', 56], ['P3', 75], ['P4', 98], ['P5', 174]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 62], ['P1', 89], ['P2', 156], ['P3', 187]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 300), ({'plazas': [['P0', 23], ['P1', 31], ['P2', 33], ['P3', 36], ['P4', 105], ['P5', 176]], 'entry': None, 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 9000, 'min_toll': 50, 'uturn_fee': 200}, 740), ({'plazas': [['P0', 19], ['P1', 66], ['P2', 80], ['P3', 132], ['P4', 149], ['P5', 182]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 500}, 875), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 81], ['P1', 123], ['P2', 132]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340)], [({'plazas': [['P0', 25], ['P1', 39], ['P2', 82]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 1000), ({'plazas': [['P0', 3], ['P1', 13], ['P2', 15], ['P3', 51], ['P4', 59], ['P5', 125]], 'entry': 'P0', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 160), ({'plazas': [['P0', 6], ['P1', 124], ['P2', 180]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 200}, 2060), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 34], ['P1', 51], ['P2', 67], ['P3', 112], ['P4', 139], ['P5', 148]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 42], ['P1', 74], ['P2', 79]], 'entry': 'P2', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 200}, 200), ({'plazas': [['P0', 22], ['P1', 113], ['P2', 177]], 'entry': 'P0', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 2705), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340)], [({'plazas': [['P0', 6], ['P1', 101], ['P2', 128], ['P3', 182]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 56], ['P1', 61], ['P2', 124], ['P3', 149], ['P4', 181]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 200}, 50), ({'plazas': [['P0', 96], ['P1', 105], ['P2', 129]], 'entry': 'P2', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 69], ['P1', 73], ['P2', 184]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 12], ['P1', 136], ['P2', 152], ['P3', 158], ['P4', 165], ['P5', 192]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 200}, 1360), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 10], ['P1', 29], ['P2', 129], ['P3', 145], ['P4', 158], ['P5', 183]], 'entry': 'P5', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 255)], [({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 20], ['P1', 97], ['P2', 145], ['P3', 177]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 141], ['P1', 151], ['P2', 167], ['P3', 195]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 53], ['P1', 113], ['P2', 186]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 200}, 1215), ({'plazas': [['P0', 7], ['P1', 10], ['P2', 85], ['P3', 97], ['P4', 154], ['P5', 162]], 'entry': 'P5', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 500}, 1210), ({'plazas': [['P0', 22], ['P1', 57], ['P2', 163], ['P3', 166]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'plazas': [['P0', 26], ['P1', 32], ['P2', 48], ['P3', 82], ['P4', 120], ['P5', 133]], 'entry': 'P4', 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 200}, 200)]]\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":"8b91dd0b7f54dbb7b8dec882cd6632d548ad0793ef4ac1516404c630160f53fe","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    km = dict(x['plazas'])\n    ex = km[x['exit']]\n    if x['entry'] is None:\n        dist = max(abs(ex - k) for k in km.values())\n    elif x['entry'] == x['exit']:\n        return x['uturn_fee']\n    else:\n        dist = ex - km[x['entry']]\n    mult = dict(x['class_pct'])[x['vclass']]\n    raw = dist * x['rate_milli'] * mult // 100\n    toll = (raw + 2500) // 5000 * 5\n    return max(toll, x['min_toll'])\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[({'plazas': [['P0', 10], ['P1', 169], ['P2', 197]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 200}, 390), ({'plazas': [['P0', 86], ['P1', 155], ['P2', 191]], 'entry': 'P2', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 1830), ({'plazas': [['P0', 7], ['P1', 79], ['P2', 125], ['P3', 144]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 200), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 50], ['P1', 108], ['P2', 149], ['P3', 150], ['P4', 171]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 200}, 150), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 76], ['P1', 80], ['P2', 135], ['P3', 187]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 47], ['P1', 85], ['P2', 102], ['P3', 121]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 200}, 200)], [({'plazas': [['P0', 22], ['P1', 66], ['P2', 137], ['P3', 194]], 'entry': 'P1', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 1730), ({'plazas': [['P0', 34], ['P1', 53], ['P2', 56], ['P3', 75], ['P4', 98], ['P5', 174]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 62], ['P1', 89], ['P2', 156], ['P3', 187]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 300), ({'plazas': [['P0', 23], ['P1', 31], ['P2', 33], ['P3', 36], ['P4', 105], ['P5', 176]], 'entry': None, 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 9000, 'min_toll': 50, 'uturn_fee': 200}, 740), ({'plazas': [['P0', 19], ['P1', 66], ['P2', 80], ['P3', 132], ['P4', 149], ['P5', 182]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 500}, 875), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 81], ['P1', 123], ['P2', 132]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340)], [({'plazas': [['P0', 25], ['P1', 39], ['P2', 82]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 1000), ({'plazas': [['P0', 3], ['P1', 13], ['P2', 15], ['P3', 51], ['P4', 59], ['P5', 125]], 'entry': 'P0', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 160), ({'plazas': [['P0', 6], ['P1', 124], ['P2', 180]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 200}, 2060), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 34], ['P1', 51], ['P2', 67], ['P3', 112], ['P4', 139], ['P5', 148]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 42], ['P1', 74], ['P2', 79]], 'entry': 'P2', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 200}, 200), ({'plazas': [['P0', 22], ['P1', 113], ['P2', 177]], 'entry': 'P0', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 2705), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340)], [({'plazas': [['P0', 6], ['P1', 101], ['P2', 128], ['P3', 182]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 56], ['P1', 61], ['P2', 124], ['P3', 149], ['P4', 181]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 200}, 50), ({'plazas': [['P0', 96], ['P1', 105], ['P2', 129]], 'entry': 'P2', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 69], ['P1', 73], ['P2', 184]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 12], ['P1', 136], ['P2', 152], ['P3', 158], ['P4', 165], ['P5', 192]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 200}, 1360), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 10], ['P1', 29], ['P2', 129], ['P3', 145], ['P4', 158], ['P5', 183]], 'entry': 'P5', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 255)], [({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': None, 'exit': 'B', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 340), ({'plazas': [['P0', 20], ['P1', 97], ['P2', 145], ['P3', 177]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 141], ['P1', 151], ['P2', 167], ['P3', 195]], 'entry': 'P3', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 50, 'uturn_fee': 500}, 500), ({'plazas': [['A', 0], ['B', 40], ['C', 95]], 'entry': 'C', 'exit': 'A', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 885), ({'plazas': [['P0', 53], ['P1', 113], ['P2', 186]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 200}, 1215), ({'plazas': [['P0', 7], ['P1', 10], ['P2', 85], ['P3', 97], ['P4', 154], ['P5', 162]], 'entry': 'P5', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 500}, 1210), ({'plazas': [['P0', 22], ['P1', 57], ['P2', 163], ['P3', 166]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'plazas': [['P0', 26], ['P1', 32], ['P2', 48], ['P3', 82], ['P4', 120], ['P5', 133]], 'entry': 'P4', 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 200}, 200)]]\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-closed-distance-toll-distance","generated_at":"2026-09-29T14:48:02.656155+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.","root_cause":"Westbound trips produce a negative distance and a minimum toll.","sha256":"d169b53b58eac54b3955e91c33c84911e0cb471a49efda11199b2cf612e4e36c","title":"Closed-system distance toll: the exit kilometre marker is charged instead of the distance · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.735,"exit_code":1,"observations":[{"actual":2750,"check":"fee oracle 0","expected":390,"passed":false},{"actual":3330,"check":"fee oracle 1","expected":1830,"passed":false},{"actual":200,"check":"fee oracle 2","expected":200,"passed":true},{"actual":340,"check":"fee oracle 3","expected":340,"passed":true},{"actual":3040,"check":"fee oracle 4","expected":150,"passed":false},{"actual":885,"check":"fee oracle 5","expected":885,"passed":true},{"actual":500,"check":"fee oracle 6","expected":500,"passed":true},{"actual":200,"check":"fee oracle 7","expected":200,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": 2750, \"expected\": 390, \"passed\": false}, {\"check\": \"fee oracle 1\", \"actual\": 3330, \"expected\": 1830, \"passed\": false}, {\"check\": \"fee oracle 2\", \"actual\": 200, \"expected\": 200, \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": 340, \"expected\": 340, \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": 3040, \"expected\": 150, \"passed\": false}, {\"check\": \"fee oracle 5\", \"actual\": 885, \"expected\": 885, \"passed\": true}, {\"check\": \"fee oracle 6\", \"actual\": 500, \"expected\": 500, \"passed\": true}, {\"check\": \"fee oracle 7\", \"actual\": 200, \"expected\": 200, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":44.019,"exit_code":1,"observations":[{"actual":50,"check":"fee oracle 0","expected":390,"passed":false},{"actual":50,"check":"fee oracle 1","expected":1830,"passed":false},{"actual":200,"check":"fee oracle 2","expected":200,"passed":true},{"actual":340,"check":"fee oracle 3","expected":340,"passed":true},{"actual":150,"check":"fee oracle 4","expected":150,"passed":true},{"actual":100,"check":"fee oracle 5","expected":885,"passed":false},{"actual":500,"check":"fee oracle 6","expected":500,"passed":true},{"actual":200,"check":"fee oracle 7","expected":200,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"fee oracle 0\", \"actual\": 50, \"expected\": 390, \"passed\": false}, {\"check\": \"fee oracle 1\", \"actual\": 50, \"expected\": 1830, \"passed\": false}, {\"check\": \"fee oracle 2\", \"actual\": 200, \"expected\": 200, \"passed\": true}, {\"check\": \"fee oracle 3\", \"actual\": 340, \"expected\": 340, \"passed\": true}, {\"check\": \"fee oracle 4\", \"actual\": 150, \"expected\": 150, \"passed\": true}, {\"check\": \"fee oracle 5\", \"actual\": 100, \"expected\": 885, \"passed\": false}, {\"check\": \"fee oracle 6\", \"actual\": 500, \"expected\": 500, \"passed\": true}, {\"check\": \"fee oracle 7\", \"actual\": 200, \"expected\": 200, \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}