FA-94476 / Exam timetabling constraints / Open access
Grand total omits chief invigilators · case 01
The staffing request is short by one person per venue.
ROOT CAUSE
The grand total sums room requirements only.
VERIFIED REPAIR
Sum the per-venue totals, which include chiefs.
Unsuccessful approach: Adding one chief per venue counts chiefs for unused venues.
Case contract
rooms [room, venue, candidates, has access-arrangement candidate]. A room with candidates needs ceil(candidates / ratio) invigilators plus one if it has an access arrangement; an empty room needs none. Each venue with any invigilators also needs one chief invigilator. Return [per room, per venue including chief, grand total].
Why this case matters
Invigilation staffing follows directly from the room plan of a timetable.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = -(-n // ratio)
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(per.values())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: grand total source 1', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'main', 0, False], ['R1', 'annex', 60, True]], 25],
[{'R0': 0, 'R1': 4}, {'main': 0, 'annex': 5}, 5]),
('partial repair guard 3', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'main', 60, True], ['R1', 'main', 30, True], ['R2', 'annex', 15, False], ['R3', 'lab', 60, True],
['R4', 'lab', 30, False]],
25],
[{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 8, 'annex': 2, 'lab': 7}, 17]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, False], ['R2', 'lab', 15, False]], 30],
[{'R0': 0, 'R1': 3, 'R2': 1}, {'main': 0, 'lab': 5}, 5]),
('normal control 7',
[[['R0', 'lab', 60, False], ['R1', 'lab', 61, False], ['R2', 'main', 0, True], ['R3', 'annex', 61, False],
['R4', 'lab', 61, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'lab': 9, 'main': 0, 'annex': 4}, 13]),
('normal control 8',
[[['R0', 'annex', 61, True], ['R1', 'lab', 0, False], ['R2', 'annex', 60, True], ['R3', 'lab', 25, False]],
30],
[{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10])],
[('regression: grand total source 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: grand total source 2', [[['R0', 'main', 61, False]], 30],
[{'R0': 3}, {'main': 4}, 4]),
('partial repair guard 3', [[['R0', 'lab', 0, False]], 30], [{'R0': 0}, {'lab': 0}, 0]),
('normal control 4',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('normal control 5', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('normal control 6',
[[['R0', 'lab', 30, False], ['R1', 'lab', 15, False], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 0, 'R3': 1}, {'lab': 4, 'annex': 2}, 6]),
('normal control 7', [[['R0', 'annex', 60, False]], 25], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 8',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9])],
[('regression: grand total source 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('partial repair guard 3',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('normal control 5',
[[['R0', 'main', 31, False], ['R1', 'main', 0, True], ['R2', 'lab', 61, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 3, 'R3': 0, 'R4': 2}, {'main': 5, 'lab': 4}, 9]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, True], ['R2', 'lab', 15, True]], 25],
[{'R0': 0, 'R1': 4, 'R2': 2}, {'main': 0, 'lab': 7}, 7]),
('normal control 7', [[['R0', 'lab', 15, True], ['R1', 'lab', 60, True], ['R2', 'lab', 15, False]], 25],
[{'R0': 2, 'R1': 4, 'R2': 1}, {'lab': 8}, 8]),
('normal control 8', [[['R0', 'lab', 15, True]], 30], [{'R0': 2}, {'lab': 3}, 3])],
[('regression: grand total source 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: grand total source 2', [[['R0', 'annex', 31, False]], 25],
[{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'lab', 0, True], ['R1', 'main', 61, False]], 25],
[{'R0': 0, 'R1': 3}, {'lab': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5',
[[['R0', 'main', 30, False], ['R1', 'lab', 30, True], ['R2', 'annex', 0, False], ['R3', 'lab', 60, True]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 4}, {'main': 3, 'lab': 8, 'annex': 0}, 11]),
('normal control 6',
[[['R0', 'annex', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0}, {'annex': 2, 'main': 2}, 4]),
('normal control 7', [[['R0', 'annex', 61, True], ['R1', 'lab', 1, True], ['R2', 'lab', 1, True]], 25],
[{'R0': 4, 'R1': 2, 'R2': 2}, {'annex': 5, 'lab': 5}, 10]),
('normal control 8',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14])],
[('regression: grand total source 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: grand total source 2',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, True], ['R2', 'lab', 0, False], ['R3', 'annex', 30, True],
['R4', 'main', 25, False]],
30],
[{'R0': 1, 'R1': 0, 'R2': 0, 'R3': 2, 'R4': 1}, {'main': 3, 'lab': 0, 'annex': 3}, 6]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 61, False], ['R1', 'lab', 30, False], ['R2', 'lab', 60, True], ['R3', 'main', 0, True]],
30],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 0}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 6',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 31, True],
['R3', 'annex', 30, True]],
25],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 3}, {'annex': 10, 'lab': 2}, 12]),
('normal control 7',
[[['R0', 'lab', 15, True], ['R1', 'lab', 1, False], ['R2', 'main', 31, False], ['R3', 'main', 60, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 3}, {'lab': 4, 'main': 6}, 10]),
('normal control 8',
[[['R0', 'lab', 31, True], ['R1', 'lab', 60, False], ['R2', 'lab', 60, False], ['R3', 'lab', 31, False],
['R4', 'lab', 30, False]],
25],
[{'R0': 3, 'R1': 3, 'R2': 3, 'R3': 2, 'R4': 2}, {'lab': 14}, 14])]]
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 |
|---|---|---|---|
| regression: grand total source 1 | [{'R1': 1}, {'main': 2}, 1] | [{'R1': 1}, {'main': 2}, 2] | Failed |
| regression variant: grand total source 2 | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 4] | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 5] | Failed |
| partial repair guard 3 | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 2] | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3] | Failed |
| boundary control 4 | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 1] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Failed |
| normal control 5 | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 14] | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 17] | Failed |
| normal control 6 | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 4] | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 5] | Failed |
| normal control 7 | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 11] | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 13] | Failed |
| normal control 8 | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 8] | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10] | Failed |
SHA-256 / 19328b3053a3eb52f0cce0c35e4feb368ad8d6a3364529f5f7c8c52a655f036e
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = -(-n // ratio)
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(per.values()) + len(venue)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: grand total source 1', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'main', 0, False], ['R1', 'annex', 60, True]], 25],
[{'R0': 0, 'R1': 4}, {'main': 0, 'annex': 5}, 5]),
('partial repair guard 3', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'main', 60, True], ['R1', 'main', 30, True], ['R2', 'annex', 15, False], ['R3', 'lab', 60, True],
['R4', 'lab', 30, False]],
25],
[{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 8, 'annex': 2, 'lab': 7}, 17]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, False], ['R2', 'lab', 15, False]], 30],
[{'R0': 0, 'R1': 3, 'R2': 1}, {'main': 0, 'lab': 5}, 5]),
('normal control 7',
[[['R0', 'lab', 60, False], ['R1', 'lab', 61, False], ['R2', 'main', 0, True], ['R3', 'annex', 61, False],
['R4', 'lab', 61, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'lab': 9, 'main': 0, 'annex': 4}, 13]),
('normal control 8',
[[['R0', 'annex', 61, True], ['R1', 'lab', 0, False], ['R2', 'annex', 60, True], ['R3', 'lab', 25, False]],
30],
[{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10])],
[('regression: grand total source 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: grand total source 2', [[['R0', 'main', 61, False]], 30],
[{'R0': 3}, {'main': 4}, 4]),
('partial repair guard 3', [[['R0', 'lab', 0, False]], 30], [{'R0': 0}, {'lab': 0}, 0]),
('normal control 4',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('normal control 5', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('normal control 6',
[[['R0', 'lab', 30, False], ['R1', 'lab', 15, False], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 0, 'R3': 1}, {'lab': 4, 'annex': 2}, 6]),
('normal control 7', [[['R0', 'annex', 60, False]], 25], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 8',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9])],
[('regression: grand total source 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('partial repair guard 3',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('normal control 5',
[[['R0', 'main', 31, False], ['R1', 'main', 0, True], ['R2', 'lab', 61, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 3, 'R3': 0, 'R4': 2}, {'main': 5, 'lab': 4}, 9]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, True], ['R2', 'lab', 15, True]], 25],
[{'R0': 0, 'R1': 4, 'R2': 2}, {'main': 0, 'lab': 7}, 7]),
('normal control 7', [[['R0', 'lab', 15, True], ['R1', 'lab', 60, True], ['R2', 'lab', 15, False]], 25],
[{'R0': 2, 'R1': 4, 'R2': 1}, {'lab': 8}, 8]),
('normal control 8', [[['R0', 'lab', 15, True]], 30], [{'R0': 2}, {'lab': 3}, 3])],
[('regression: grand total source 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: grand total source 2', [[['R0', 'annex', 31, False]], 25],
[{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'lab', 0, True], ['R1', 'main', 61, False]], 25],
[{'R0': 0, 'R1': 3}, {'lab': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5',
[[['R0', 'main', 30, False], ['R1', 'lab', 30, True], ['R2', 'annex', 0, False], ['R3', 'lab', 60, True]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 4}, {'main': 3, 'lab': 8, 'annex': 0}, 11]),
('normal control 6',
[[['R0', 'annex', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0}, {'annex': 2, 'main': 2}, 4]),
('normal control 7', [[['R0', 'annex', 61, True], ['R1', 'lab', 1, True], ['R2', 'lab', 1, True]], 25],
[{'R0': 4, 'R1': 2, 'R2': 2}, {'annex': 5, 'lab': 5}, 10]),
('normal control 8',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14])],
[('regression: grand total source 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: grand total source 2',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, True], ['R2', 'lab', 0, False], ['R3', 'annex', 30, True],
['R4', 'main', 25, False]],
30],
[{'R0': 1, 'R1': 0, 'R2': 0, 'R3': 2, 'R4': 1}, {'main': 3, 'lab': 0, 'annex': 3}, 6]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 61, False], ['R1', 'lab', 30, False], ['R2', 'lab', 60, True], ['R3', 'main', 0, True]],
30],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 0}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 6',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 31, True],
['R3', 'annex', 30, True]],
25],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 3}, {'annex': 10, 'lab': 2}, 12]),
('normal control 7',
[[['R0', 'lab', 15, True], ['R1', 'lab', 1, False], ['R2', 'main', 31, False], ['R3', 'main', 60, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 3}, {'lab': 4, 'main': 6}, 10]),
('normal control 8',
[[['R0', 'lab', 31, True], ['R1', 'lab', 60, False], ['R2', 'lab', 60, False], ['R3', 'lab', 31, False],
['R4', 'lab', 30, False]],
25],
[{'R0': 3, 'R1': 3, 'R2': 3, 'R3': 2, 'R4': 2}, {'lab': 14}, 14])]]
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 |
|---|---|---|---|
| regression: grand total source 1 | [{'R1': 1}, {'main': 2}, 2] | [{'R1': 1}, {'main': 2}, 2] | Passed |
| regression variant: grand total source 2 | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 6] | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 5] | Failed |
| partial repair guard 3 | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 4] | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3] | Failed |
| boundary control 4 | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 3] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Failed |
| normal control 5 | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 17] | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 17] | Passed |
| normal control 6 | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 6] | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 5] | Failed |
| normal control 7 | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 14] | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 13] | Failed |
| normal control 8 | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10] | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10] | Passed |
SHA-256 / 959df33a0751fe77b04880b8295d3d8919ff361a44652f332df73a6fc96b4827
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rooms, ratio):
per = {}
venue = {}
for r, v, n, acc in rooms:
k = 0
if n > 0:
k = -(-n // ratio)
if acc:
k += 1
per[r] = k
venue.setdefault(v, 0)
venue[v] += k
for v in venue:
if venue[v] > 0:
venue[v] += 1
return [per, venue, sum(venue.values())]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: grand total source 1', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'main', 0, False], ['R1', 'annex', 60, True]], 25],
[{'R0': 0, 'R1': 4}, {'main': 0, 'annex': 5}, 5]),
('partial repair guard 3', [[['R0', 'lab', 0, False], ['R1', 'main', 31, False]], 30],
[{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3]),
('boundary control 4', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('normal control 5',
[[['R0', 'main', 60, True], ['R1', 'main', 30, True], ['R2', 'annex', 15, False], ['R3', 'lab', 60, True],
['R4', 'lab', 30, False]],
25],
[{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 8, 'annex': 2, 'lab': 7}, 17]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, False], ['R2', 'lab', 15, False]], 30],
[{'R0': 0, 'R1': 3, 'R2': 1}, {'main': 0, 'lab': 5}, 5]),
('normal control 7',
[[['R0', 'lab', 60, False], ['R1', 'lab', 61, False], ['R2', 'main', 0, True], ['R3', 'annex', 61, False],
['R4', 'lab', 61, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'lab': 9, 'main': 0, 'annex': 4}, 13]),
('normal control 8',
[[['R0', 'annex', 61, True], ['R1', 'lab', 0, False], ['R2', 'annex', 60, True], ['R3', 'lab', 25, False]],
30],
[{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10])],
[('regression: grand total source 1', [[['R1', 'main', 31, False]], 30], [{'R1': 2}, {'main': 3}, 3]),
('regression variant: grand total source 2', [[['R0', 'main', 61, False]], 30],
[{'R0': 3}, {'main': 4}, 4]),
('partial repair guard 3', [[['R0', 'lab', 0, False]], 30], [{'R0': 0}, {'lab': 0}, 0]),
('normal control 4',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('normal control 5', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('normal control 6',
[[['R0', 'lab', 30, False], ['R1', 'lab', 15, False], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 0, 'R3': 1}, {'lab': 4, 'annex': 2}, 6]),
('normal control 7', [[['R0', 'annex', 60, False]], 25], [{'R0': 3}, {'annex': 4}, 4]),
('normal control 8',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, False], ['R2', 'main', 1, False], ['R3', 'main', 60, True],
['R4', 'main', 15, True]],
25],
[{'R0': 1, 'R1': 0, 'R2': 1, 'R3': 4, 'R4': 2}, {'main': 9, 'lab': 0}, 9])],
[('regression: grand total source 1', [[['R1', 'main', 0, False], ['R2', 'annex', 5, False]], 30],
[{'R1': 0, 'R2': 1}, {'main': 0, 'annex': 2}, 2]),
('regression variant: grand total source 2', [[['R0', 'annex', 0, True], ['R1', 'lab', 30, False]], 30],
[{'R0': 0, 'R1': 1}, {'annex': 0, 'lab': 2}, 2]),
('partial repair guard 3',
[[['R0', 'annex', 0, True], ['R1', 'main', 60, False], ['R2', 'main', 15, False],
['R3', 'annex', 0, True]],
30],
[{'R0': 0, 'R1': 2, 'R2': 1, 'R3': 0}, {'annex': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('normal control 5',
[[['R0', 'main', 31, False], ['R1', 'main', 0, True], ['R2', 'lab', 61, False], ['R3', 'lab', 0, False],
['R4', 'main', 31, False]],
30],
[{'R0': 2, 'R1': 0, 'R2': 3, 'R3': 0, 'R4': 2}, {'main': 5, 'lab': 4}, 9]),
('normal control 6', [[['R0', 'main', 0, False], ['R1', 'lab', 61, True], ['R2', 'lab', 15, True]], 25],
[{'R0': 0, 'R1': 4, 'R2': 2}, {'main': 0, 'lab': 7}, 7]),
('normal control 7', [[['R0', 'lab', 15, True], ['R1', 'lab', 60, True], ['R2', 'lab', 15, False]], 25],
[{'R0': 2, 'R1': 4, 'R2': 1}, {'lab': 8}, 8]),
('normal control 8', [[['R0', 'lab', 15, True]], 30], [{'R0': 2}, {'lab': 3}, 3])],
[('regression: grand total source 1', [[['R1', 'main', 12, True], ['R2', 'main', 40, False]], 25],
[{'R1': 2, 'R2': 2}, {'main': 5}, 5]),
('regression variant: grand total source 2', [[['R0', 'annex', 31, False]], 25],
[{'R0': 2}, {'annex': 3}, 3]),
('partial repair guard 3', [[['R0', 'lab', 0, True], ['R1', 'main', 61, False]], 25],
[{'R0': 0, 'R1': 3}, {'lab': 0, 'main': 4}, 4]),
('boundary control 4', [[['R1', 'main', 0, True]], 30], [{'R1': 0}, {'main': 0}, 0]),
('normal control 5',
[[['R0', 'main', 30, False], ['R1', 'lab', 30, True], ['R2', 'annex', 0, False], ['R3', 'lab', 60, True]],
25],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 4}, {'main': 3, 'lab': 8, 'annex': 0}, 11]),
('normal control 6',
[[['R0', 'annex', 0, False], ['R1', 'annex', 1, False], ['R2', 'main', 1, False],
['R3', 'main', 0, False]],
25],
[{'R0': 0, 'R1': 1, 'R2': 1, 'R3': 0}, {'annex': 2, 'main': 2}, 4]),
('normal control 7', [[['R0', 'annex', 61, True], ['R1', 'lab', 1, True], ['R2', 'lab', 1, True]], 25],
[{'R0': 4, 'R1': 2, 'R2': 2}, {'annex': 5, 'lab': 5}, 10]),
('normal control 8',
[[['R0', 'main', 31, False], ['R1', 'main', 31, False], ['R2', 'lab', 60, True],
['R3', 'annex', 60, False]],
25],
[{'R0': 2, 'R1': 2, 'R2': 4, 'R3': 3}, {'main': 5, 'lab': 5, 'annex': 4}, 14])],
[('regression: grand total source 1', [[['R0', 'lab', 60, False], ['R1', 'lab', 25, True]], 30],
[{'R0': 2, 'R1': 2}, {'lab': 5}, 5]),
('regression variant: grand total source 2',
[[['R0', 'lab', 31, False], ['R1', 'main', 60, True], ['R2', 'lab', 0, False], ['R3', 'annex', 1, False],
['R4', 'annex', 15, False]],
30],
[{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 1, 'R4': 1}, {'lab': 3, 'main': 4, 'annex': 3}, 10]),
('partial repair guard 3',
[[['R0', 'main', 25, False], ['R1', 'lab', 0, True], ['R2', 'lab', 0, False], ['R3', 'annex', 30, True],
['R4', 'main', 25, False]],
30],
[{'R0': 1, 'R1': 0, 'R2': 0, 'R3': 2, 'R4': 1}, {'main': 3, 'lab': 0, 'annex': 3}, 6]),
('boundary control 4', [[['R1', 'main', 30, False]], 30], [{'R1': 1}, {'main': 2}, 2]),
('normal control 5',
[[['R0', 'annex', 61, False], ['R1', 'lab', 30, False], ['R2', 'lab', 60, True], ['R3', 'main', 0, True]],
30],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 0}, {'annex': 4, 'lab': 5, 'main': 0}, 9]),
('normal control 6',
[[['R0', 'annex', 61, False], ['R1', 'lab', 15, False], ['R2', 'annex', 31, True],
['R3', 'annex', 30, True]],
25],
[{'R0': 3, 'R1': 1, 'R2': 3, 'R3': 3}, {'annex': 10, 'lab': 2}, 12]),
('normal control 7',
[[['R0', 'lab', 15, True], ['R1', 'lab', 1, False], ['R2', 'main', 31, False], ['R3', 'main', 60, False]],
25],
[{'R0': 2, 'R1': 1, 'R2': 2, 'R3': 3}, {'lab': 4, 'main': 6}, 10]),
('normal control 8',
[[['R0', 'lab', 31, True], ['R1', 'lab', 60, False], ['R2', 'lab', 60, False], ['R3', 'lab', 31, False],
['R4', 'lab', 30, False]],
25],
[{'R0': 3, 'R1': 3, 'R2': 3, 'R3': 2, 'R4': 2}, {'lab': 14}, 14])]]
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 |
|---|---|---|---|
| regression: grand total source 1 | [{'R1': 1}, {'main': 2}, 2] | [{'R1': 1}, {'main': 2}, 2] | Passed |
| regression variant: grand total source 2 | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 5] | [{'R0': 0, 'R1': 4}, {'annex': 5, 'main': 0}, 5] | Passed |
| partial repair guard 3 | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3] | [{'R0': 0, 'R1': 2}, {'lab': 0, 'main': 3}, 3] | Passed |
| boundary control 4 | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | [{'R1': 0, 'R2': 1}, {'annex': 2, 'main': 0}, 2] | Passed |
| normal control 5 | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 17] | [{'R0': 4, 'R1': 3, 'R2': 1, 'R3': 4, 'R4': 2}, {'annex': 2, 'lab': 7, 'main': 8}, 17] | Passed |
| normal control 6 | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 5] | [{'R0': 0, 'R1': 3, 'R2': 1}, {'lab': 5, 'main': 0}, 5] | Passed |
| normal control 7 | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 13] | [{'R0': 2, 'R1': 3, 'R2': 0, 'R3': 3, 'R4': 3}, {'annex': 4, 'lab': 9, 'main': 0}, 13] | Passed |
| normal control 8 | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10] | [{'R0': 4, 'R1': 0, 'R2': 3, 'R3': 1}, {'annex': 8, 'lab': 2}, 10] | Passed |
SHA-256 / c345b029e016ad7d636a56404427b269d630a3969fa8cee03a6d977e6f9f3969
Verification & scope
Stipulated toy exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. 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:52:04.695983+00:00.
Case digest / 0d22e7906ea91a2cf4dc14b4494cc2b34ad5c23572992a3e0c1cdaeacdaac124