FA-92906 / EV charging session scheduling / Open access
Shared circuit current allocation: minimum pilot current eligibility · case 01
Vehicles whose onboard charger accepts exactly 6 A are left paused.
ROOT CAUSE
The eligibility test excludes the 6 A minimum itself.
VERIFIED REPAIR
Accept EVs whose max_a is at least 6.
Unsuccessful approach: Lowering the bound to 5 A admits vehicles that cannot run at the minimum pilot current.
Case contract
evs is a list of [id, max_a, priority]. An EV with max_a < 6 cannot be served. Eligible EVs are ordered by priority descending then id; each is admitted while 6*(admitted+1) <= limit_a. Admitted EVs are water-filled: repeatedly give floor(remaining/open) amps, fixing EVs whose max_a <= share at their max. Leftover amps go one each in admission order to EVs below max. Return [[id, amps]] for every EV sorted by id (0 = paused).
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(limit_a, evs):
elig = [e for e in evs if e[1] > 6]
elig.sort(key=lambda e: (-e[2], e[0]))
admitted = []
for e in elig:
if 6 * (len(admitted) + 1) <= limit_a:
admitted.append(e)
alloc = {e[0]: 0 for e in evs}
remaining = limit_a
open_ = list(admitted)
while open_:
share = remaining // len(open_)
capped = [e for e in open_ if e[1] <= share]
if not capped:
for e in open_:
alloc[e[0]] = share
remaining -= share * len(open_)
break
for e in capped:
alloc[e[0]] = e[1]
remaining -= e[1]
open_.remove(e)
for e in admitted:
if remaining <= 0:
break
if alloc[e[0]] < e[1]:
alloc[e[0]] += 1
remaining -= 1
return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[63,
[['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
[['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
['regression: minimum pilot current eligibility (partial repair)',
[16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
[['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[32,
[['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
['EV0', 32, 3]]],
[['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
['regression: minimum pilot current eligibility (partial repair)',
[24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
[['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
['control 1',
[30,
[['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
[['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
[['EV0', 0], ['EV1', 9], ['EV2', 9]]],
['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
[['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
['control 2',
[48,
[['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
[['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
[['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
['regression: minimum pilot current eligibility (partial repair)',
[40,
[['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
[['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
[['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share | [['A', 6], ['B', 0]] | [['A', 6], ['B', 0]] | Passed |
| boundary: EV at 6 A maximum | [['A', 0], ['B', 20]] | [['A', 6], ['B', 14]] | Failed |
| boundary: no EVs | [] | [] | Passed |
| regression: minimum pilot current eligibility | [['EV0', 24], ['EV1', 0], ['EV2', 0], ['EV3', 0], ['EV4', 24], ['EV5', 8]] | [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]] | Failed |
| regression: minimum pilot current eligibility (partial repair) | [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]] | [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]] | Passed |
| control 1 | [['EV0', 16], ['EV1', 16]] | [['EV0', 16], ['EV1', 16]] | Passed |
| control 2 | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | Passed |
SHA-256 / 431df85f8d3788b1872d0e7695c72d31d89ffa2914675bedcead3df3b496549c
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(limit_a, evs):
elig = [e for e in evs if e[1] >= 5]
elig.sort(key=lambda e: (-e[2], e[0]))
admitted = []
for e in elig:
if 6 * (len(admitted) + 1) <= limit_a:
admitted.append(e)
alloc = {e[0]: 0 for e in evs}
remaining = limit_a
open_ = list(admitted)
while open_:
share = remaining // len(open_)
capped = [e for e in open_ if e[1] <= share]
if not capped:
for e in open_:
alloc[e[0]] = share
remaining -= share * len(open_)
break
for e in capped:
alloc[e[0]] = e[1]
remaining -= e[1]
open_.remove(e)
for e in admitted:
if remaining <= 0:
break
if alloc[e[0]] < e[1]:
alloc[e[0]] += 1
remaining -= 1
return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[63,
[['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
[['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
['regression: minimum pilot current eligibility (partial repair)',
[16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
[['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[32,
[['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
['EV0', 32, 3]]],
[['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
['regression: minimum pilot current eligibility (partial repair)',
[24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
[['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
['control 1',
[30,
[['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
[['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
[['EV0', 0], ['EV1', 9], ['EV2', 9]]],
['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
[['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
['control 2',
[48,
[['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
[['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
[['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
['regression: minimum pilot current eligibility (partial repair)',
[40,
[['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
[['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
[['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share | [['A', 6], ['B', 0]] | [['A', 6], ['B', 0]] | Passed |
| boundary: EV at 6 A maximum | [['A', 6], ['B', 14]] | [['A', 6], ['B', 14]] | Passed |
| boundary: no EVs | [] | [] | Passed |
| regression: minimum pilot current eligibility | [['EV0', 20], ['EV1', 5], ['EV2', 6], ['EV3', 5], ['EV4', 19], ['EV5', 8]] | [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]] | Failed |
| regression: minimum pilot current eligibility (partial repair) | [['EV0', 11], ['EV1', 0], ['EV2', 5], ['EV3', 0]] | [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]] | Failed |
| control 1 | [['EV0', 16], ['EV1', 16]] | [['EV0', 16], ['EV1', 16]] | Passed |
| control 2 | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | Passed |
SHA-256 / 4a06b8e3c9f9238147307b0b30ae4be418f6ae85871ea67a8b2afc9d95f81a03
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(limit_a, evs):
elig = [e for e in evs if e[1] >= 6]
elig.sort(key=lambda e: (-e[2], e[0]))
admitted = []
for e in elig:
if 6 * (len(admitted) + 1) <= limit_a:
admitted.append(e)
alloc = {e[0]: 0 for e in evs}
remaining = limit_a
open_ = list(admitted)
while open_:
share = remaining // len(open_)
capped = [e for e in open_ if e[1] <= share]
if not capped:
for e in open_:
alloc[e[0]] = share
remaining -= share * len(open_)
break
for e in capped:
alloc[e[0]] = e[1]
remaining -= e[1]
open_.remove(e)
for e in admitted:
if remaining <= 0:
break
if alloc[e[0]] < e[1]:
alloc[e[0]] += 1
remaining -= 1
return [[k, alloc[k]] for k in sorted(alloc)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[63,
[['EV4', 24, 3], ['EV5', 8, 1], ['EV2', 6, 0], ['EV3', 5, 1], ['EV1', 5, 3], ['EV0', 24, 3]]],
[['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]]],
['regression: minimum pilot current eligibility (partial repair)',
[16, [['EV3', 16, 2], ['EV0', 16, 3], ['EV2', 5, 2], ['EV1', 5, 1]]],
[['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]]],
['control 1', [32, [['EV0', 32, 3], ['EV1', 24, 3]]], [['EV0', 16], ['EV1', 16]]],
['control 2', [24, [['EV0', 16, 2], ['EV1', 32, 2], ['EV2', 32, 0], ['EV3', 8, 1]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[32,
[['EV2', 32, 1], ['EV4', 32, 0], ['EV3', 6, 2], ['EV1', 32, 2], ['EV5', 24, 1],
['EV0', 32, 3]]],
[['EV0', 7], ['EV1', 7], ['EV2', 6], ['EV3', 6], ['EV4', 0], ['EV5', 6]]],
['regression: minimum pilot current eligibility (partial repair)',
[24, [['EV0', 10, 2], ['EV4', 6, 3], ['EV2', 5, 3], ['EV3', 32, 1], ['EV1', 16, 3]]],
[['EV0', 6], ['EV1', 6], ['EV2', 0], ['EV3', 6], ['EV4', 6]]],
['control 1',
[30,
[['EV1', 8, 3], ['EV4', 6, 2], ['EV0', 16, 0], ['EV2', 10, 3], ['EV3', 24, 1], ['EV5', 6, 2]]],
[['EV0', 0], ['EV1', 6], ['EV2', 6], ['EV3', 6], ['EV4', 6], ['EV5', 6]]],
['control 2', [40, [['EV1', 5, 1], ['EV0', 32, 2]]], [['EV0', 32], ['EV1', 0]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[16, [['EV0', 6, 1], ['EV2', 5, 1], ['EV1', 24, 3]]], [['EV0', 6], ['EV1', 10], ['EV2', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[10, [['EV0', 5, 3], ['EV1', 10, 2]]], [['EV0', 0], ['EV1', 10]]],
['control 1', [18, [['EV2', 32, 0], ['EV0', 5, 2], ['EV1', 24, 3]]],
[['EV0', 0], ['EV1', 9], ['EV2', 9]]],
['control 2', [16, [['EV0', 24, 3], ['EV1', 16, 0], ['EV2', 16, 2]]],
[['EV0', 8], ['EV1', 0], ['EV2', 8]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[18, [['EV2', 6, 0], ['EV1', 24, 1], ['EV3', 24, 0], ['EV0', 32, 2]]],
[['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 0]]],
['regression: minimum pilot current eligibility (partial repair)',
[48, [['EV2', 8, 2], ['EV0', 32, 3], ['EV1', 5, 3]]], [['EV0', 32], ['EV1', 0], ['EV2', 8]]],
['control 1', [16, [['EV1', 16, 2], ['EV0', 32, 3]]], [['EV0', 8], ['EV1', 8]]],
['control 2',
[48,
[['EV3', 8, 0], ['EV1', 16, 0], ['EV4', 5, 0], ['EV2', 8, 0], ['EV5', 10, 0], ['EV0', 10, 3]]],
[['EV0', 10], ['EV1', 12], ['EV2', 8], ['EV3', 8], ['EV4', 0], ['EV5', 10]]]],
[['boundary: exactly one minimum share', [6, [['A', 32, 0], ['B', 32, 0]]], [['A', 6], ['B', 0]]],
['boundary: EV at 6 A maximum', [20, [['A', 6, 0], ['B', 32, 0]]], [['A', 6], ['B', 14]]],
['boundary: no EVs', [32, []], []],
['regression: minimum pilot current eligibility',
[40, [['EV1', 24, 3], ['EV0', 6, 0], ['EV2', 32, 1], ['EV3', 32, 3]]],
[['EV0', 6], ['EV1', 12], ['EV2', 11], ['EV3', 11]]],
['regression: minimum pilot current eligibility (partial repair)',
[40,
[['EV0', 5, 0], ['EV2', 24, 3], ['EV1', 32, 0], ['EV5', 8, 2], ['EV3', 10, 2], ['EV4', 8, 1]]],
[['EV0', 0], ['EV1', 8], ['EV2', 8], ['EV3', 8], ['EV4', 8], ['EV5', 8]]],
['control 1', [40, [['EV2', 5, 0], ['EV0', 6, 2], ['EV3', 24, 2], ['EV1', 10, 3]]],
[['EV0', 6], ['EV1', 10], ['EV2', 0], ['EV3', 24]]],
['control 2', [10, [['EV0', 10, 0]]], [['EV0', 10]]]]]
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: exactly one minimum share | [['A', 6], ['B', 0]] | [['A', 6], ['B', 0]] | Passed |
| boundary: EV at 6 A maximum | [['A', 6], ['B', 14]] | [['A', 6], ['B', 14]] | Passed |
| boundary: no EVs | [] | [] | Passed |
| regression: minimum pilot current eligibility | [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]] | [['EV0', 24], ['EV1', 0], ['EV2', 6], ['EV3', 0], ['EV4', 24], ['EV5', 8]] | Passed |
| regression: minimum pilot current eligibility (partial repair) | [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]] | [['EV0', 8], ['EV1', 0], ['EV2', 0], ['EV3', 8]] | Passed |
| control 1 | [['EV0', 16], ['EV1', 16]] | [['EV0', 16], ['EV1', 16]] | Passed |
| control 2 | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | [['EV0', 6], ['EV1', 6], ['EV2', 6], ['EV3', 6]] | Passed |
SHA-256 / fb349bf25b841966db9c1c14734d79a56d0b4f96421aefdd0d0696063dfa72ef
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:50.390264+00:00.
Case digest / 2558b09dd3b3a8c963fe40c6ed582fb475a53744149d8f7665f270512f96c6fa