FA-93091 / EV charging session scheduling / Open access
Round-robin port rotation: timeline membership · case 01
Timeline rows are in port order and differ between identical fleets.
ROOT CAUSE
Charging ids are listed in port assignment order instead of sorted order.
VERIFIED REPAIR
Sort the ids of every active vehicle for each slot.
Unsuccessful approach: Filtering out vehicles in their last slot hides real charging.
Case contract
vehicles is [[id, need_slots]] in arrival order. Each slot, free ports are filled from the FIFO queue; a vehicle holds its port for quantum slots or until done, then goes to the back of the queue. Return [timeline of sorted charging ids per slot, [[id, finish]] sorted by id] where finish is the slot index after its last charging slot, 0 when nothing was needed, None if unfinished.
Why this case matters
Depot, workplace and public EV chargers schedule sessions against prices, circuit limits and departure deadlines; a wrong decision silently strands a driver or overloads a feeder.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(vehicles, ports, slots, quantum):
queue = [[vid, need] for vid, need in vehicles if need > 0]
done = {vid: (0 if need <= 0 else None) for vid, need in vehicles}
active = []
timeline = []
for t in range(slots):
while len(active) < ports and queue:
v = queue.pop(0)
active.append([v[0], v[1], quantum])
timeline.append([a[0] for a in active])
nxt = []
for a in active:
a[1] -= 1
a[2] -= 1
if a[1] == 0:
done[a[0]] = t + 1
elif a[2] == 0:
queue.append([a[0], a[1]])
else:
nxt.append(a)
active = nxt
return [timeline, [[k, done[k]] for k in sorted(done)]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 0], ['V1', 6], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 1]], 2, 9, 2],
[[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'],
['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']],
[['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]]],
['regression: timeline membership (partial repair)', [[['V0', 2], ['V1', 0], ['V2', 3]], 3, 8, 1],
[[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]]],
['control 1', [[['V0', 1], ['V1', 4], ['V2', 6], ['V3', 2], ['V4', 5], ['V5', 5]], 1, 10, 2],
[[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]]],
['control 2', [[['V0', 5], ['V1', 3], ['V2', 2]], 1, 6, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 4], ['V2', 4], ['V3', 1], ['V4', 5], ['V5', 1]], 3, 12, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5'],
['V0', 'V1', 'V4'], ['V0', 'V2', 'V4'], ['V4'], ['V4'], [], [], [], []],
[['V0', 6], ['V1', 5], ['V2', 6], ['V3', 4], ['V4', 8], ['V5', 4]]]],
['regression: timeline membership (partial repair)',
[[['V0', 1], ['V1', 3], ['V2', 2], ['V3', 6], ['V4', 0], ['V5', 0]], 2, 5, 3],
[[['V0', 'V1'], ['V1', 'V2'], ['V1', 'V2'], ['V3'], ['V3']],
[['V0', 1], ['V1', 3], ['V2', 3], ['V3', None], ['V4', 0], ['V5', 0]]]],
['control 1', [[['V0', 1], ['V1', 6], ['V2', 6], ['V3', 1], ['V4', 1]], 1, 7, 3],
[[['V0'], ['V1'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 2], ['V1', 2], ['V2', 3], ['V3', 0], ['V4', 4], ['V5', 3]], 1, 3, 3],
[[['V0'], ['V0'], ['V1']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', 0], ['V4', None], ['V5', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 0], ['V2', 3], ['V3', 1], ['V4', 0], ['V5', 4]], 2, 8, 2],
[[['V0', 'V2'], ['V0', 'V2'], ['V3', 'V5'], ['V0', 'V5'], ['V0', 'V2'], ['V5'], ['V5'], []],
[['V0', 5], ['V1', 0], ['V2', 5], ['V3', 3], ['V4', 0], ['V5', 7]]]],
['regression: timeline membership (partial repair)',
[[['V0', 4], ['V1', 2], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 6]], 1, 10, 3],
[[['V0'], ['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2'], ['V3'], ['V3']],
[['V0', None], ['V1', 5], ['V2', None], ['V3', None], ['V4', None], ['V5', None]]]],
['control 1', [[['V0', 0], ['V1', 6], ['V2', 4]], 2, 7, 3],
[[['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1'], ['V1'], []],
[['V0', 0], ['V1', 6], ['V2', 4]]]],
['control 2', [[['V0', 3], ['V1', 0]], 1, 3, 1],
[[['V0'], ['V0'], ['V0']], [['V0', 3], ['V1', 0]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 6], ['V2', 2], ['V3', 2], ['V4', 5]], 3, 5, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V3'], ['V0', 'V3', 'V4'], ['V1', 'V4']],
[['V0', 4], ['V1', None], ['V2', 2], ['V3', 4], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 3, 8, 2],
[[['V0'], ['V0'], ['V0'], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 2], ['V1', 3], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 3]], 3, 3, 2],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', None], ['V4', 3], ['V5', None]]]],
['control 2', [[['V0', 2], ['V1', 6], ['V2', 6]], 1, 10, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V1'], ['V1'], ['V2'], ['V2']],
[['V0', 2], ['V1', None], ['V2', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 5], ['V2', 6], ['V3', 0], ['V4', 6]], 3, 8, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V4'],
['V0', 'V1', 'V4'], ['V2', 'V4'], ['V2', 'V4'], ['V2', 'V4']],
[['V0', 5], ['V1', 5], ['V2', 8], ['V3', 0], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 2, 9, 1],
[[['V0'], ['V0'], ['V0'], [], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 4], ['V1', 3], ['V2', 4], ['V3', 5], ['V4', 6]], 3, 3, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2']],
[['V0', None], ['V1', 3], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 4], ['V1', 0], ['V2', 0], ['V3', 4], ['V4', 2]], 1, 12, 1],
[[['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V0'], ['V3'], [], []],
[['V0', 9], ['V1', 0], ['V2', 0], ['V3', 10], ['V4', 6]]]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| boundary: vehicle needing nothing | [[['B'], ['B'], []], [['A', 0], ['B', 2]]] | [[['B'], ['B'], []], [['A', 0], ['B', 2]]] | Passed |
| boundary: finishes exactly at quantum end | [[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]] | [[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]] | Passed |
| boundary: more ports than vehicles | [[['A'], ['A'], ['A'], []], [['A', 3]]] | [[['A'], ['A'], ['A'], []], [['A', 3]]] | Passed |
| regression: timeline membership | [[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'], ['V3', 'V1'], ['V3', 'V1'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | [[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | Failed |
| regression: timeline membership (partial repair) | [[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | [[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | Passed |
| control 1 | [[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | [[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | Passed |
| control 2 | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]] | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]] | Passed |
SHA-256 / ab4825e4d9a78c35eb4370574e723ab9401ed06f84a612d8e2840627c2dce16c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(vehicles, ports, slots, quantum):
queue = [[vid, need] for vid, need in vehicles if need > 0]
done = {vid: (0 if need <= 0 else None) for vid, need in vehicles}
active = []
timeline = []
for t in range(slots):
while len(active) < ports and queue:
v = queue.pop(0)
active.append([v[0], v[1], quantum])
timeline.append(sorted(a[0] for a in active if a[1] > 1))
nxt = []
for a in active:
a[1] -= 1
a[2] -= 1
if a[1] == 0:
done[a[0]] = t + 1
elif a[2] == 0:
queue.append([a[0], a[1]])
else:
nxt.append(a)
active = nxt
return [timeline, [[k, done[k]] for k in sorted(done)]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 0], ['V1', 6], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 1]], 2, 9, 2],
[[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'],
['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']],
[['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]]],
['regression: timeline membership (partial repair)', [[['V0', 2], ['V1', 0], ['V2', 3]], 3, 8, 1],
[[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]]],
['control 1', [[['V0', 1], ['V1', 4], ['V2', 6], ['V3', 2], ['V4', 5], ['V5', 5]], 1, 10, 2],
[[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]]],
['control 2', [[['V0', 5], ['V1', 3], ['V2', 2]], 1, 6, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 4], ['V2', 4], ['V3', 1], ['V4', 5], ['V5', 1]], 3, 12, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5'],
['V0', 'V1', 'V4'], ['V0', 'V2', 'V4'], ['V4'], ['V4'], [], [], [], []],
[['V0', 6], ['V1', 5], ['V2', 6], ['V3', 4], ['V4', 8], ['V5', 4]]]],
['regression: timeline membership (partial repair)',
[[['V0', 1], ['V1', 3], ['V2', 2], ['V3', 6], ['V4', 0], ['V5', 0]], 2, 5, 3],
[[['V0', 'V1'], ['V1', 'V2'], ['V1', 'V2'], ['V3'], ['V3']],
[['V0', 1], ['V1', 3], ['V2', 3], ['V3', None], ['V4', 0], ['V5', 0]]]],
['control 1', [[['V0', 1], ['V1', 6], ['V2', 6], ['V3', 1], ['V4', 1]], 1, 7, 3],
[[['V0'], ['V1'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 2], ['V1', 2], ['V2', 3], ['V3', 0], ['V4', 4], ['V5', 3]], 1, 3, 3],
[[['V0'], ['V0'], ['V1']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', 0], ['V4', None], ['V5', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 0], ['V2', 3], ['V3', 1], ['V4', 0], ['V5', 4]], 2, 8, 2],
[[['V0', 'V2'], ['V0', 'V2'], ['V3', 'V5'], ['V0', 'V5'], ['V0', 'V2'], ['V5'], ['V5'], []],
[['V0', 5], ['V1', 0], ['V2', 5], ['V3', 3], ['V4', 0], ['V5', 7]]]],
['regression: timeline membership (partial repair)',
[[['V0', 4], ['V1', 2], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 6]], 1, 10, 3],
[[['V0'], ['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2'], ['V3'], ['V3']],
[['V0', None], ['V1', 5], ['V2', None], ['V3', None], ['V4', None], ['V5', None]]]],
['control 1', [[['V0', 0], ['V1', 6], ['V2', 4]], 2, 7, 3],
[[['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1'], ['V1'], []],
[['V0', 0], ['V1', 6], ['V2', 4]]]],
['control 2', [[['V0', 3], ['V1', 0]], 1, 3, 1],
[[['V0'], ['V0'], ['V0']], [['V0', 3], ['V1', 0]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 6], ['V2', 2], ['V3', 2], ['V4', 5]], 3, 5, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V3'], ['V0', 'V3', 'V4'], ['V1', 'V4']],
[['V0', 4], ['V1', None], ['V2', 2], ['V3', 4], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 3, 8, 2],
[[['V0'], ['V0'], ['V0'], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 2], ['V1', 3], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 3]], 3, 3, 2],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', None], ['V4', 3], ['V5', None]]]],
['control 2', [[['V0', 2], ['V1', 6], ['V2', 6]], 1, 10, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V1'], ['V1'], ['V2'], ['V2']],
[['V0', 2], ['V1', None], ['V2', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 5], ['V2', 6], ['V3', 0], ['V4', 6]], 3, 8, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V4'],
['V0', 'V1', 'V4'], ['V2', 'V4'], ['V2', 'V4'], ['V2', 'V4']],
[['V0', 5], ['V1', 5], ['V2', 8], ['V3', 0], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 2, 9, 1],
[[['V0'], ['V0'], ['V0'], [], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 4], ['V1', 3], ['V2', 4], ['V3', 5], ['V4', 6]], 3, 3, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2']],
[['V0', None], ['V1', 3], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 4], ['V1', 0], ['V2', 0], ['V3', 4], ['V4', 2]], 1, 12, 1],
[[['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V0'], ['V3'], [], []],
[['V0', 9], ['V1', 0], ['V2', 0], ['V3', 10], ['V4', 6]]]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| boundary: vehicle needing nothing | [[['B'], [], []], [['A', 0], ['B', 2]]] | [[['B'], ['B'], []], [['A', 0], ['B', 2]]] | Failed |
| boundary: finishes exactly at quantum end | [[['A'], [], ['B'], [], []], [['A', 2], ['B', 4]]] | [[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]] | Failed |
| boundary: more ports than vehicles | [[['A'], ['A'], [], []], [['A', 3]]] | [[['A'], ['A'], ['A'], []], [['A', 3]]] | Failed |
| regression: timeline membership | [[['V1', 'V2'], ['V1', 'V2'], ['V3'], ['V3'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V3'], ['V3'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | [[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | Failed |
| regression: timeline membership (partial repair) | [[['V0', 'V2'], ['V2'], [], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | [[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | Failed |
| control 1 | [[[], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], [], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | [[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | Failed |
| control 2 | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], []], [['V0', None], ['V1', None], ['V2', 6]]] | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]] | Failed |
SHA-256 / a774b0817546c27e168993e3f3701d53974141159d44c94902aba6c5adf1f86d
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(vehicles, ports, slots, quantum):
queue = [[vid, need] for vid, need in vehicles if need > 0]
done = {vid: (0 if need <= 0 else None) for vid, need in vehicles}
active = []
timeline = []
for t in range(slots):
while len(active) < ports and queue:
v = queue.pop(0)
active.append([v[0], v[1], quantum])
timeline.append(sorted(a[0] for a in active))
nxt = []
for a in active:
a[1] -= 1
a[2] -= 1
if a[1] == 0:
done[a[0]] = t + 1
elif a[2] == 0:
queue.append([a[0], a[1]])
else:
nxt.append(a)
active = nxt
return [timeline, [[k, done[k]] for k in sorted(done)]]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 0], ['V1', 6], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 1]], 2, 9, 2],
[[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'],
['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']],
[['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]]],
['regression: timeline membership (partial repair)', [[['V0', 2], ['V1', 0], ['V2', 3]], 3, 8, 1],
[[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]]],
['control 1', [[['V0', 1], ['V1', 4], ['V2', 6], ['V3', 2], ['V4', 5], ['V5', 5]], 1, 10, 2],
[[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]]],
['control 2', [[['V0', 5], ['V1', 3], ['V2', 2]], 1, 6, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 4], ['V2', 4], ['V3', 1], ['V4', 5], ['V5', 1]], 3, 12, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5'],
['V0', 'V1', 'V4'], ['V0', 'V2', 'V4'], ['V4'], ['V4'], [], [], [], []],
[['V0', 6], ['V1', 5], ['V2', 6], ['V3', 4], ['V4', 8], ['V5', 4]]]],
['regression: timeline membership (partial repair)',
[[['V0', 1], ['V1', 3], ['V2', 2], ['V3', 6], ['V4', 0], ['V5', 0]], 2, 5, 3],
[[['V0', 'V1'], ['V1', 'V2'], ['V1', 'V2'], ['V3'], ['V3']],
[['V0', 1], ['V1', 3], ['V2', 3], ['V3', None], ['V4', 0], ['V5', 0]]]],
['control 1', [[['V0', 1], ['V1', 6], ['V2', 6], ['V3', 1], ['V4', 1]], 1, 7, 3],
[[['V0'], ['V1'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2']],
[['V0', 1], ['V1', None], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 2], ['V1', 2], ['V2', 3], ['V3', 0], ['V4', 4], ['V5', 3]], 1, 3, 3],
[[['V0'], ['V0'], ['V1']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', 0], ['V4', None], ['V5', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 0], ['V2', 3], ['V3', 1], ['V4', 0], ['V5', 4]], 2, 8, 2],
[[['V0', 'V2'], ['V0', 'V2'], ['V3', 'V5'], ['V0', 'V5'], ['V0', 'V2'], ['V5'], ['V5'], []],
[['V0', 5], ['V1', 0], ['V2', 5], ['V3', 3], ['V4', 0], ['V5', 7]]]],
['regression: timeline membership (partial repair)',
[[['V0', 4], ['V1', 2], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 6]], 1, 10, 3],
[[['V0'], ['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V2'], ['V3'], ['V3']],
[['V0', None], ['V1', 5], ['V2', None], ['V3', None], ['V4', None], ['V5', None]]]],
['control 1', [[['V0', 0], ['V1', 6], ['V2', 4]], 2, 7, 3],
[[['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V2'], ['V1'], ['V1'], []],
[['V0', 0], ['V1', 6], ['V2', 4]]]],
['control 2', [[['V0', 3], ['V1', 0]], 1, 3, 1],
[[['V0'], ['V0'], ['V0']], [['V0', 3], ['V1', 0]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 4], ['V1', 6], ['V2', 2], ['V3', 2], ['V4', 5]], 3, 5, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V3'], ['V0', 'V3', 'V4'], ['V1', 'V4']],
[['V0', 4], ['V1', None], ['V2', 2], ['V3', 4], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 3, 8, 2],
[[['V0'], ['V0'], ['V0'], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 2], ['V1', 3], ['V2', 6], ['V3', 6], ['V4', 1], ['V5', 3]], 3, 3, 2],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V3', 'V4', 'V5']],
[['V0', 2], ['V1', None], ['V2', None], ['V3', None], ['V4', 3], ['V5', None]]]],
['control 2', [[['V0', 2], ['V1', 6], ['V2', 6]], 1, 10, 2],
[[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V1'], ['V1'], ['V2'], ['V2']],
[['V0', 2], ['V1', None], ['V2', None]]]]],
[['boundary: vehicle needing nothing', [[['A', 0], ['B', 2]], 1, 3, 1],
[[['B'], ['B'], []], [['A', 0], ['B', 2]]]],
['boundary: finishes exactly at quantum end', [[['A', 2], ['B', 2]], 1, 5, 2],
[[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]]],
['boundary: more ports than vehicles', [[['A', 3]], 2, 4, 1],
[[['A'], ['A'], ['A'], []], [['A', 3]]]],
['regression: timeline membership',
[[['V0', 5], ['V1', 5], ['V2', 6], ['V3', 0], ['V4', 6]], 3, 8, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V4'],
['V0', 'V1', 'V4'], ['V2', 'V4'], ['V2', 'V4'], ['V2', 'V4']],
[['V0', 5], ['V1', 5], ['V2', 8], ['V3', 0], ['V4', None]]]],
['regression: timeline membership (partial repair)', [[['V0', 3]], 2, 9, 1],
[[['V0'], ['V0'], ['V0'], [], [], [], [], [], []], [['V0', 3]]]],
['control 1', [[['V0', 4], ['V1', 3], ['V2', 4], ['V3', 5], ['V4', 6]], 3, 3, 3],
[[['V0', 'V1', 'V2'], ['V0', 'V1', 'V2'], ['V0', 'V1', 'V2']],
[['V0', None], ['V1', 3], ['V2', None], ['V3', None], ['V4', None]]]],
['control 2', [[['V0', 4], ['V1', 0], ['V2', 0], ['V3', 4], ['V4', 2]], 1, 12, 1],
[[['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V4'], ['V0'], ['V3'], ['V0'], ['V3'], [], []],
[['V0', 9], ['V1', 0], ['V2', 0], ['V3', 10], ['V4', 6]]]]]]
for label, args, expected in fixtures[N-1]:
check(label, 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 |
|---|---|---|---|
| boundary: vehicle needing nothing | [[['B'], ['B'], []], [['A', 0], ['B', 2]]] | [[['B'], ['B'], []], [['A', 0], ['B', 2]]] | Passed |
| boundary: finishes exactly at quantum end | [[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]] | [[['A'], ['A'], ['B'], ['B'], []], [['A', 2], ['B', 4]]] | Passed |
| boundary: more ports than vehicles | [[['A'], ['A'], ['A'], []], [['A', 3]]] | [[['A'], ['A'], ['A'], []], [['A', 3]]] | Passed |
| regression: timeline membership | [[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | [[['V1', 'V2'], ['V1', 'V2'], ['V3', 'V4'], ['V3', 'V5'], ['V1', 'V2'], ['V1', 'V2'], ['V1', 'V3'], ['V1', 'V3'], ['V2', 'V3']], [['V0', 0], ['V1', 8], ['V2', None], ['V3', None], ['V4', 3], ['V5', 4]]] | Passed |
| regression: timeline membership (partial repair) | [[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | [[['V0', 'V2'], ['V0', 'V2'], ['V2'], [], [], [], [], []], [['V0', 2], ['V1', 0], ['V2', 3]]] | Passed |
| control 1 | [[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | [[['V0'], ['V1'], ['V1'], ['V2'], ['V2'], ['V3'], ['V3'], ['V4'], ['V4'], ['V5']], [['V0', 1], ['V1', None], ['V2', None], ['V3', 7], ['V4', None], ['V5', None]]] | Passed |
| control 2 | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]] | [[['V0'], ['V0'], ['V1'], ['V1'], ['V2'], ['V2']], [['V0', None], ['V1', None], ['V2', 6]]] | Passed |
SHA-256 / fd956db133dc5b74eb32085a6607126ff7b32ee999149f9605727f00bd9fafa0
Verification & scope
Deterministic stipulated toy contract for teaching; no claim of conformance with any standard, vendor protocol or production controller. 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:51:51.895791+00:00.
Case digest / 4de1a0b20af600be07f1db9e5475771916b80549d56d9fe42fb03d7742188f03