FA-94766 / Exam timetabling constraints / Open access
Room features compared in the wrong subset direction · case 01
Well-equipped rooms are rejected and bare rooms accepted.
ROOT CAUSE
Missing features are computed as room features not required.
VERIFIED REPAIR
Missing = required features minus room features.
Unsuccessful approach: The symmetric difference also reports unneeded room features.
Case contract
placements [exam, room, seats]; rooms room -> [capacity, features]; needs exam -> required features. Features compare case-insensitively. Report [exam, room, "features", sorted missing] for each placement lacking features, then ["*", room, "capacity", [load, capacity]] for rooms whose total placed seats exceed capacity.
Why this case matters
Room suitability (labs, computers, accessibility) and capacity are hard constraints of room allocation.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(placements, rooms, needs):
out = []
load = {}
for ex, room, seats in placements:
cap, fl = rooms[room]
have = {f.lower() for f in fl}
miss = sorted(have - {f.lower() for f in needs.get(ex, [])})
if miss:
out.append([ex, room, 'features', miss])
load[room] = load.get(room, 0) + seats
for room in sorted(load):
if load[room] > rooms[room][0]:
out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: feature subset direction 1',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('regression variant: feature subset direction 2',
[[['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],
[['PHYS110', 'R2', 'features', ['computers']]]),
('partial repair guard 3',
[[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[]),
('normal control 5',
[[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],
['MATH101H', 'R4', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 7',
[[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],
['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [],
'MATH101H': ['Lab'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['CHEM120', 'R3', 'features', ['accessible', 'computers']],
['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),
('normal control 8',
[[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers'],
'PHYS110': [],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],
[('regression: feature subset direction 1',
[[['A', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[['A', 'R3', 'features', ['lab']]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],
['MATH101', 'R3', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],
[['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],
['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],
['*', 'R3', 'capacity', [5, 1]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'CHEM120': []}],
[['*', 'R2', 'capacity', [6, 3]]]),
('normal control 4',
[[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'MATH101H': [],
'PHYS110': ['accessible', 'Lab'],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],
['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers', 'Lab'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],
['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[])],
[('regression: feature subset direction 1',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('partial repair guard 3',
[[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],
[['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),
('boundary control 4',
[[['A', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['accessible', 'Lab']}],
[]),
('normal control 5',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 6',
[[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'],
'MATH101H': [],
'PHYS110': ['Lab', 'accessible'],
'CHEM120': ['accessible', 'computers']}],
[['PHYS110', 'R2', 'features', ['accessible']]]),
('normal control 7',
[[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'],
'MATH101H': ['computers', 'accessible'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],
['MATH101H', 'R4', 'features', ['computers']]]),
('normal control 8',
[[['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'PHYS110': ['accessible', 'computers'],
'CHEM120': ['Lab', 'computers']}],
[])],
[('regression: feature subset direction 1',
[[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': ['Lab', 'accessible']}],
[['MATH101', 'R2', 'features', ['accessible', 'computers']],
['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),
('regression variant: feature subset direction 2',
[[['MATH101H', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[]),
('partial repair guard 3',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],
['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
[['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],
[['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 8',
[[['MATH101', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],
[['MATH101', 'R2', 'features', ['accessible']]])],
[('regression: feature subset direction 1',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('regression variant: feature subset direction 2',
[[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],
['MATH101', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],
[['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],
['*', 'R1', 'capacity', [3, 2]]]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],
[]),
('boundary control 4',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('normal control 5',
[[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],
[['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[['*', 'R1', 'capacity', [3, 2]]]),
('normal control 8',
[[['PHYS110', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],
[['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]
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: feature subset direction 1 | [['A', 'R1', 'features', ['accessible']]] | [] | Failed |
| regression variant: feature subset direction 2 | [] | [['PHYS110', 'R2', 'features', ['computers']]] | Failed |
| partial repair guard 3 | [['MATH101H', 'R1', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [3, 1]]] | [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]] | Failed |
| boundary control 4 | [] | [] | Passed |
| normal control 5 | [['CHEM120', 'R4', 'features', ['accessible']], ['CHEM120', 'R4', 'features', ['accessible']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [4, 1]]] | Failed |
| normal control 6 | [['MATH101H', 'R1', 'features', ['computers']], ['PHYS110', 'R1', 'features', ['accessible', 'computers']], ['CHEM120', 'R1', 'features', ['accessible']], ['MATH101H', 'R4', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | Failed |
| normal control 7 | [['MATH101H', 'R4', 'features', ['accessible']], ['MATH101', 'R1', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['lab']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]] | Failed |
| normal control 8 | [['MATH101', 'R1', 'features', ['computers']], ['PHYS110', 'R2', 'features', ['lab']]] | [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]] | Failed |
SHA-256 / 82fd7e8b652adffe43481bcc44aa634d3c5edddce26e36539ca525069e7ea74d
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(placements, rooms, needs):
out = []
load = {}
for ex, room, seats in placements:
cap, fl = rooms[room]
have = {f.lower() for f in fl}
miss = sorted(have ^ {f.lower() for f in needs.get(ex, [])})
if miss:
out.append([ex, room, 'features', miss])
load[room] = load.get(room, 0) + seats
for room in sorted(load):
if load[room] > rooms[room][0]:
out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: feature subset direction 1',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('regression variant: feature subset direction 2',
[[['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],
[['PHYS110', 'R2', 'features', ['computers']]]),
('partial repair guard 3',
[[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[]),
('normal control 5',
[[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],
['MATH101H', 'R4', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 7',
[[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],
['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [],
'MATH101H': ['Lab'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['CHEM120', 'R3', 'features', ['accessible', 'computers']],
['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),
('normal control 8',
[[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers'],
'PHYS110': [],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],
[('regression: feature subset direction 1',
[[['A', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[['A', 'R3', 'features', ['lab']]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],
['MATH101', 'R3', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],
[['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],
['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],
['*', 'R3', 'capacity', [5, 1]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'CHEM120': []}],
[['*', 'R2', 'capacity', [6, 3]]]),
('normal control 4',
[[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'MATH101H': [],
'PHYS110': ['accessible', 'Lab'],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],
['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers', 'Lab'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],
['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[])],
[('regression: feature subset direction 1',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('partial repair guard 3',
[[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],
[['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),
('boundary control 4',
[[['A', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['accessible', 'Lab']}],
[]),
('normal control 5',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 6',
[[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'],
'MATH101H': [],
'PHYS110': ['Lab', 'accessible'],
'CHEM120': ['accessible', 'computers']}],
[['PHYS110', 'R2', 'features', ['accessible']]]),
('normal control 7',
[[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'],
'MATH101H': ['computers', 'accessible'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],
['MATH101H', 'R4', 'features', ['computers']]]),
('normal control 8',
[[['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'PHYS110': ['accessible', 'computers'],
'CHEM120': ['Lab', 'computers']}],
[])],
[('regression: feature subset direction 1',
[[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': ['Lab', 'accessible']}],
[['MATH101', 'R2', 'features', ['accessible', 'computers']],
['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),
('regression variant: feature subset direction 2',
[[['MATH101H', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[]),
('partial repair guard 3',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],
['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
[['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],
[['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 8',
[[['MATH101', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],
[['MATH101', 'R2', 'features', ['accessible']]])],
[('regression: feature subset direction 1',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('regression variant: feature subset direction 2',
[[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],
['MATH101', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],
[['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],
['*', 'R1', 'capacity', [3, 2]]]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],
[]),
('boundary control 4',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('normal control 5',
[[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],
[['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[['*', 'R1', 'capacity', [3, 2]]]),
('normal control 8',
[[['PHYS110', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],
[['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]
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: feature subset direction 1 | [['A', 'R1', 'features', ['accessible']]] | [] | Failed |
| regression variant: feature subset direction 2 | [['PHYS110', 'R2', 'features', ['computers']]] | [['PHYS110', 'R2', 'features', ['computers']]] | Passed |
| partial repair guard 3 | [['MATH101H', 'R1', 'features', ['accessible', 'computers']], ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]] | [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]] | Failed |
| boundary control 4 | [] | [] | Passed |
| normal control 5 | [['CHEM120', 'R4', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [4, 1]]] | Failed |
| normal control 6 | [['MATH101H', 'R1', 'features', ['computers']], ['PHYS110', 'R1', 'features', ['accessible', 'computers']], ['CHEM120', 'R1', 'features', ['accessible', 'lab']], ['MATH101H', 'R4', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | Failed |
| normal control 7 | [['MATH101H', 'R4', 'features', ['accessible']], ['MATH101', 'R1', 'features', ['accessible', 'computers']], ['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['accessible', 'computers', 'lab']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]] | Failed |
| normal control 8 | [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['computers', 'lab']], ['PHYS110', 'R2', 'features', ['lab']]] | [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]] | Failed |
SHA-256 / 78193e36ee87727ea23ee026e4a7c870be585b8aaff863fb4f7c657e84d5ee4f
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(placements, rooms, needs):
out = []
load = {}
for ex, room, seats in placements:
cap, fl = rooms[room]
have = {f.lower() for f in fl}
miss = sorted({f.lower() for f in needs.get(ex, [])} - have)
if miss:
out.append([ex, room, 'features', miss])
load[room] = load.get(room, 0) + seats
for room in sorted(load):
if load[room] > rooms[room][0]:
out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: feature subset direction 1',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('regression variant: feature subset direction 2',
[[['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],
[['PHYS110', 'R2', 'features', ['computers']]]),
('partial repair guard 3',
[[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[]),
('normal control 5',
[[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],
['MATH101H', 'R4', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],
[['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 7',
[[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],
['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [],
'MATH101H': ['Lab'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['CHEM120', 'R3', 'features', ['accessible', 'computers']],
['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),
('normal control 8',
[[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers'],
'PHYS110': [],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],
[('regression: feature subset direction 1',
[[['A', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['Lab']}],
[['A', 'R3', 'features', ['lab']]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],
['MATH101', 'R3', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],
[['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],
['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],
['*', 'R3', 'capacity', [5, 1]]]),
('partial repair guard 3',
[[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'CHEM120': []}],
[['*', 'R2', 'capacity', [6, 3]]]),
('normal control 4',
[[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'MATH101H': [],
'PHYS110': ['accessible', 'Lab'],
'CHEM120': ['computers', 'Lab']}],
[['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],
['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'accessible'],
'MATH101H': ['computers', 'Lab'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],
['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),
('normal control 8',
[[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': [],
'CHEM120': ['Lab', 'accessible']}],
[])],
[('regression: feature subset direction 1',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('regression variant: feature subset direction 2',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('partial repair guard 3',
[[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],
[['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),
('boundary control 4',
[[['A', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['accessible', 'Lab']}],
[]),
('normal control 5',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('normal control 6',
[[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'],
'MATH101H': [],
'PHYS110': ['Lab', 'accessible'],
'CHEM120': ['accessible', 'computers']}],
[['PHYS110', 'R2', 'features', ['accessible']]]),
('normal control 7',
[[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'],
'MATH101H': ['computers', 'accessible'],
'PHYS110': ['computers', 'accessible'],
'CHEM120': ['computers', 'accessible']}],
[['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],
['MATH101H', 'R4', 'features', ['computers']]]),
('normal control 8',
[[['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'accessible'],
'PHYS110': ['accessible', 'computers'],
'CHEM120': ['Lab', 'computers']}],
[])],
[('regression: feature subset direction 1',
[[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible', 'computers'],
'MATH101H': ['Lab', 'computers'],
'PHYS110': ['Lab', 'accessible']}],
[['MATH101', 'R2', 'features', ['accessible', 'computers']],
['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),
('regression variant: feature subset direction 2',
[[['MATH101H', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[]),
('partial repair guard 3',
[[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],
[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),
('boundary control 4',
[[['A', 'R2', 2], ['B', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{}],
[['*', 'R2', 'capacity', [4, 3]]]),
('normal control 5',
[[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],
['PHYS110', 'R2', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
[['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],
['*', 'R3', 'capacity', [4, 1]]]),
('normal control 6',
[[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],
[['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],
[['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 8',
[[['MATH101', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],
[['MATH101', 'R2', 'features', ['accessible']]])],
[('regression: feature subset direction 1',
[[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
[['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],
['*', 'R3', 'capacity', [2, 1]]]),
('regression variant: feature subset direction 2',
[[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],
['MATH101', 'R4', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],
[['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],
['*', 'R1', 'capacity', [3, 2]]]),
('partial repair guard 3',
[[['PHYS110', 'R4', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],
[]),
('boundary control 4',
[[['A', 'R1', 2]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'A': ['computers']}],
[]),
('normal control 5',
[[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],
[['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],
['*', 'R3', 'capacity', [3, 1]]]),
('normal control 6',
[[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],
[['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),
('normal control 7',
[[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],
[['*', 'R1', 'capacity', [3, 2]]]),
('normal control 8',
[[['PHYS110', 'R3', 1]],
{'R1': [2, ['Computers', 'accessible']],
'R2': [3, ['lab']],
'R3': [1, []],
'R4': [4, ['ACCESSIBLE', 'lab']]},
{'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],
[['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]
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: feature subset direction 1 | [] | [] | Passed |
| regression variant: feature subset direction 2 | [['PHYS110', 'R2', 'features', ['computers']]] | [['PHYS110', 'R2', 'features', ['computers']]] | Passed |
| partial repair guard 3 | [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]] | [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]] | Passed |
| boundary control 4 | [] | [] | Passed |
| normal control 5 | [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [4, 1]]] | Passed |
| normal control 6 | [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]], ['*', 'R3', 'capacity', [2, 1]]] | Passed |
| normal control 7 | [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]] | [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]] | Passed |
| normal control 8 | [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]] | [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]] | Passed |
SHA-256 / 10cdb723b22fa51bc3ac1595e3da3211c0f99edf2cfb8b9c1cd3ec763dfd27df
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:07.389422+00:00.
Case digest / 6c2b97330725e08e3fc465b98e036c2910ddeacc50d1a828da9ae3e7e5f0da42