FA-68506 / Toll and parking fee computation / Open access
Closed-system distance toll: short trips bypass the minimum toll · case 01
Closed-system distance toll returns a wrong result when short trips bypass the minimum toll.
ROOT CAUSE
Short trips pay less than the minimum toll.
VERIFIED REPAIR
Restore the minimum toll rule so that the step reads `return max(toll, x['min_toll'])`.
Unsuccessful approach: Scaling the flat minimum by the vehicle class overcharges short heavy-vehicle trips.
Case 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.
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):
km = dict(x['plazas'])
ex = km[x['exit']]
if x['entry'] is None:
dist = max(abs(ex - k) for k in km.values())
elif x['entry'] == x['exit']:
return x['uturn_fee']
else:
dist = abs(ex - km[x['entry']])
mult = dict(x['class_pct'])[x['vclass']]
raw = dist * x['rate_milli'] * mult // 100
toll = (raw + 2500) // 5000 * 5
return toll
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'plazas': [['P0', 58], ['P1', 59], ['P2', 130], ['P3', 146]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 73], ['P1', 78], ['P2', 85]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 200}, 70), ({'plazas': [['P0', 10], ['P1', 39], ['P2', 62], ['P3', 180]], 'entry': None, 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 2460), ({'plazas': [['P0', 54], ['P1', 55], ['P2', 106], ['P3', 175]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 51], ['P1', 119], ['P2', 152], ['P3', 161], ['P4', 179], ['P5', 196]], 'entry': 'P3', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 50, 'uturn_fee': 200}, 1135), ({'plazas': [['P0', 69], ['P1', 101], ['P2', 150], ['P3', 164], ['P4', 167], ['P5', 172]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'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', 101], ['P1', 192], ['P2', 196]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 88], ['P1', 104], ['P2', 116], ['P3', 185]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 54], ['P1', 81], ['P2', 115], ['P3', 123], ['P4', 176]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 110), ({'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': [['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', 37], ['P1', 61], ['P2', 63], ['P3', 68], ['P4', 146]], 'entry': None, 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 1445), ({'plazas': [['P0', 31], ['P1', 186], ['P2', 189]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'plazas': [['P0', 5], ['P1', 21], ['P2', 34], ['P3', 129], ['P4', 139]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 27], ['P2', 61], ['P3', 102], ['P4', 107], ['P5', 154]], 'entry': 'P0', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 1270), ({'plazas': [['P0', 15], ['P1', 46], ['P2', 56], ['P3', 99], ['P4', 193]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 205), ({'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', 9], ['P1', 11], ['P2', 76], ['P3', 147], ['P4', 159], ['P5', 197]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 59], ['P1', 124], ['P2', 182], ['P3', 186]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 45], ['P1', 93], ['P2', 126], ['P3', 156], ['P4', 194]], 'entry': 'P4', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 1510), ({'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', 17], ['P1', 21], ['P2', 195]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 50)], [({'plazas': [['P0', 21], ['P1', 39], ['P2', 51], ['P3', 133], ['P4', 139], ['P5', 161]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 200}, 150), ({'plazas': [['P0', 10], ['P1', 28], ['P2', 59], ['P3', 68], ['P4', 193]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 245), ({'plazas': [['P0', 96], ['P1', 177], ['P2', 185]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 4], ['P1', 155], ['P2', 175], ['P3', 181], ['P4', 196]], 'entry': None, 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 865), ({'plazas': [['P0', 20], ['P1', 60], ['P2', 152], ['P3', 164], ['P4', 179], ['P5', 198]], 'entry': 'P3', 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 2], ['P1', 27], ['P2', 35], ['P3', 178], ['P4', 196]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 25], ['P2', 114], ['P3', 116], ['P4', 171]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 200), ({'plazas': [['P0', 146], ['P1', 152], ['P2', 158]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 9], ['P1', 23], ['P2', 83], ['P3', 85], ['P4', 160], ['P5', 186]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 48], ['P1', 114], ['P2', 116], ['P3', 138], ['P4', 193]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 200}, 910), ({'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', 90], ['P1', 98], ['P2', 110], ['P3', 115], ['P4', 123]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 171], ['P1', 175], ['P2', 196]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 200}, 50), ({'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)]]
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 | 25 | 100 | Failed |
| fee oracle 1 | 70 | 70 | Passed |
| fee oracle 2 | 2460 | 2460 | Passed |
| fee oracle 3 | 10 | 100 | Failed |
| fee oracle 4 | 885 | 885 | Passed |
| fee oracle 5 | 1135 | 1135 | Passed |
| fee oracle 6 | 30 | 100 | Failed |
| fee oracle 7 | 340 | 340 | Passed |
SHA-256 / 28ef9c9dee2317c7519ee139964e2e1de476f803df2dd75281dc6d608318a8cb
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
km = dict(x['plazas'])
ex = km[x['exit']]
if x['entry'] is None:
dist = max(abs(ex - k) for k in km.values())
elif x['entry'] == x['exit']:
return x['uturn_fee']
else:
dist = abs(ex - km[x['entry']])
mult = dict(x['class_pct'])[x['vclass']]
raw = dist * x['rate_milli'] * mult // 100
toll = (raw + 2500) // 5000 * 5
return max(toll, x['min_toll'] * mult // 100)
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'plazas': [['P0', 58], ['P1', 59], ['P2', 130], ['P3', 146]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 73], ['P1', 78], ['P2', 85]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 200}, 70), ({'plazas': [['P0', 10], ['P1', 39], ['P2', 62], ['P3', 180]], 'entry': None, 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 2460), ({'plazas': [['P0', 54], ['P1', 55], ['P2', 106], ['P3', 175]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 51], ['P1', 119], ['P2', 152], ['P3', 161], ['P4', 179], ['P5', 196]], 'entry': 'P3', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 50, 'uturn_fee': 200}, 1135), ({'plazas': [['P0', 69], ['P1', 101], ['P2', 150], ['P3', 164], ['P4', 167], ['P5', 172]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'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', 101], ['P1', 192], ['P2', 196]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 88], ['P1', 104], ['P2', 116], ['P3', 185]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 54], ['P1', 81], ['P2', 115], ['P3', 123], ['P4', 176]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 110), ({'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': [['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', 37], ['P1', 61], ['P2', 63], ['P3', 68], ['P4', 146]], 'entry': None, 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 1445), ({'plazas': [['P0', 31], ['P1', 186], ['P2', 189]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'plazas': [['P0', 5], ['P1', 21], ['P2', 34], ['P3', 129], ['P4', 139]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 27], ['P2', 61], ['P3', 102], ['P4', 107], ['P5', 154]], 'entry': 'P0', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 1270), ({'plazas': [['P0', 15], ['P1', 46], ['P2', 56], ['P3', 99], ['P4', 193]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 205), ({'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', 9], ['P1', 11], ['P2', 76], ['P3', 147], ['P4', 159], ['P5', 197]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 59], ['P1', 124], ['P2', 182], ['P3', 186]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 45], ['P1', 93], ['P2', 126], ['P3', 156], ['P4', 194]], 'entry': 'P4', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 1510), ({'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', 17], ['P1', 21], ['P2', 195]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 50)], [({'plazas': [['P0', 21], ['P1', 39], ['P2', 51], ['P3', 133], ['P4', 139], ['P5', 161]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 200}, 150), ({'plazas': [['P0', 10], ['P1', 28], ['P2', 59], ['P3', 68], ['P4', 193]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 245), ({'plazas': [['P0', 96], ['P1', 177], ['P2', 185]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 4], ['P1', 155], ['P2', 175], ['P3', 181], ['P4', 196]], 'entry': None, 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 865), ({'plazas': [['P0', 20], ['P1', 60], ['P2', 152], ['P3', 164], ['P4', 179], ['P5', 198]], 'entry': 'P3', 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 2], ['P1', 27], ['P2', 35], ['P3', 178], ['P4', 196]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 25], ['P2', 114], ['P3', 116], ['P4', 171]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 200), ({'plazas': [['P0', 146], ['P1', 152], ['P2', 158]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 9], ['P1', 23], ['P2', 83], ['P3', 85], ['P4', 160], ['P5', 186]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 48], ['P1', 114], ['P2', 116], ['P3', 138], ['P4', 193]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 200}, 910), ({'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', 90], ['P1', 98], ['P2', 110], ['P3', 115], ['P4', 123]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 171], ['P1', 175], ['P2', 196]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 200}, 50), ({'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)]]
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 | 300 | 100 | Failed |
| fee oracle 1 | 150 | 70 | Failed |
| fee oracle 2 | 2460 | 2460 | Passed |
| fee oracle 3 | 150 | 100 | Failed |
| fee oracle 4 | 885 | 885 | Passed |
| fee oracle 5 | 1135 | 1135 | Passed |
| fee oracle 6 | 150 | 100 | Failed |
| fee oracle 7 | 340 | 340 | Passed |
SHA-256 / 6c02e18657b29690c378a6046afe03be52ac6e1ccca385a5833e1216f1204892
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
km = dict(x['plazas'])
ex = km[x['exit']]
if x['entry'] is None:
dist = max(abs(ex - k) for k in km.values())
elif x['entry'] == x['exit']:
return x['uturn_fee']
else:
dist = abs(ex - km[x['entry']])
mult = dict(x['class_pct'])[x['vclass']]
raw = dist * x['rate_milli'] * mult // 100
toll = (raw + 2500) // 5000 * 5
return max(toll, x['min_toll'])
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'plazas': [['P0', 58], ['P1', 59], ['P2', 130], ['P3', 146]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 73], ['P1', 78], ['P2', 85]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 200}, 70), ({'plazas': [['P0', 10], ['P1', 39], ['P2', 62], ['P3', 180]], 'entry': None, 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 2460), ({'plazas': [['P0', 54], ['P1', 55], ['P2', 106], ['P3', 175]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 51], ['P1', 119], ['P2', 152], ['P3', 161], ['P4', 179], ['P5', 196]], 'entry': 'P3', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 50, 'uturn_fee': 200}, 1135), ({'plazas': [['P0', 69], ['P1', 101], ['P2', 150], ['P3', 164], ['P4', 167], ['P5', 172]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'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', 101], ['P1', 192], ['P2', 196]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 88], ['P1', 104], ['P2', 116], ['P3', 185]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 54], ['P1', 81], ['P2', 115], ['P3', 123], ['P4', 176]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 110), ({'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': [['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', 37], ['P1', 61], ['P2', 63], ['P3', 68], ['P4', 146]], 'entry': None, 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 1445), ({'plazas': [['P0', 31], ['P1', 186], ['P2', 189]], 'entry': 'P2', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 7750, 'min_toll': 100, 'uturn_fee': 200}, 100), ({'plazas': [['P0', 5], ['P1', 21], ['P2', 34], ['P3', 129], ['P4', 139]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 27], ['P2', 61], ['P3', 102], ['P4', 107], ['P5', 154]], 'entry': 'P0', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 1270), ({'plazas': [['P0', 15], ['P1', 46], ['P2', 56], ['P3', 99], ['P4', 193]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 205), ({'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', 9], ['P1', 11], ['P2', 76], ['P3', 147], ['P4', 159], ['P5', 197]], 'entry': 'P1', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 59], ['P1', 124], ['P2', 182], ['P3', 186]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 45], ['P1', 93], ['P2', 126], ['P3', 156], ['P4', 194]], 'entry': 'P4', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 500}, 1510), ({'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', 17], ['P1', 21], ['P2', 195]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 4500, 'min_toll': 50, 'uturn_fee': 500}, 50)], [({'plazas': [['P0', 21], ['P1', 39], ['P2', 51], ['P3', 133], ['P4', 139], ['P5', 161]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 200}, 150), ({'plazas': [['P0', 10], ['P1', 28], ['P2', 59], ['P3', 68], ['P4', 193]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 4, 'rate_milli': 9000, 'min_toll': 150, 'uturn_fee': 500}, 245), ({'plazas': [['P0', 96], ['P1', 177], ['P2', 185]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 4], ['P1', 155], ['P2', 175], ['P3', 181], ['P4', 196]], 'entry': None, 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 865), ({'plazas': [['P0', 20], ['P1', 60], ['P2', 152], ['P3', 164], ['P4', 179], ['P5', 198]], 'entry': 'P3', 'exit': 'P4', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'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', 2], ['P1', 27], ['P2', 35], ['P3', 178], ['P4', 196]], 'entry': 'P4', 'exit': 'P3', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 7750, 'min_toll': 150, 'uturn_fee': 200}, 150)], [({'plazas': [['P0', 11], ['P1', 25], ['P2', 114], ['P3', 116], ['P4', 171]], 'entry': 'P0', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 150, 'uturn_fee': 200}, 200), ({'plazas': [['P0', 146], ['P1', 152], ['P2', 158]], 'entry': 'P1', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 150, 'uturn_fee': 500}, 150), ({'plazas': [['P0', 9], ['P1', 23], ['P2', 83], ['P3', 85], ['P4', 160], ['P5', 186]], 'entry': 'P1', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 500), ({'plazas': [['P0', 48], ['P1', 114], ['P2', 116], ['P3', 138], ['P4', 193]], 'entry': 'P3', 'exit': 'P0', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 3, 'rate_milli': 4500, 'min_toll': 100, 'uturn_fee': 200}, 910), ({'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', 90], ['P1', 98], ['P2', 110], ['P3', 115], ['P4', 123]], 'entry': 'P3', 'exit': 'P2', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 1, 'rate_milli': 6200, 'min_toll': 100, 'uturn_fee': 500}, 100), ({'plazas': [['P0', 171], ['P1', 175], ['P2', 196]], 'entry': 'P0', 'exit': 'P1', 'class_pct': [[1, 100], [2, 150], [3, 225], [4, 300]], 'vclass': 2, 'rate_milli': 6200, 'min_toll': 50, 'uturn_fee': 200}, 50), ({'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)]]
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 | 100 | 100 | Passed |
| fee oracle 1 | 70 | 70 | Passed |
| fee oracle 2 | 2460 | 2460 | Passed |
| fee oracle 3 | 100 | 100 | Passed |
| fee oracle 4 | 885 | 885 | Passed |
| fee oracle 5 | 1135 | 1135 | Passed |
| fee oracle 6 | 100 | 100 | Passed |
| fee oracle 7 | 340 | 340 | Passed |
SHA-256 / b519dff996dff3cedcf1d59da95fab6073e21c3deb8180c961370ba8bff8234a
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.831298+00:00.
Case digest / 82a7c311949fecb9b218f01ec0eb2a1f25e5d101f6e6452a8f43a8cf71f64040