FAILURE MAP
← Case archive

FA-94776 / Exam timetabling constraints / Open access

Room capacity checked against the last placement only · case 01

Several exams sharing a room overfill it without a finding.

Verified by executionVariant 1 · 8 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

Room load is overwritten per placement.

VERIFIED REPAIR

Sum seats of all placements in the room.

Unsuccessful approach: Keeping the largest placement ignores sharing.

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({f.lower() for f in needs.get(ex, [])} - have)
        if miss:
            out.append([ex, room, 'features', miss])
        load[room] = 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: room load aggregation 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: room load aggregation 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',
   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 2], ['MATH101', 'R4', 2], ['CHEM120', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['*', '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',
   [[['MATH101', 'R4', 3], ['CHEM120', 'R3', 2], ['MATH101H', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']],
    ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]),
  ('normal control 6',
   [[['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': ['computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]),
  ('normal control 7',
   [[['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers'], 'PHYS110': ['computers', 'accessible'], 'CHEM120': []}],
   [['MATH101H', 'R4', 'features', ['computers']]]),
  ('normal control 8',
   [[['MATH101', 'R4', 3], ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'Lab'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]])],
 [('regression: room load aggregation 1',
   [[['MATH101H', 'R3', 1], ['CHEM120', 'R3', 1], ['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': [], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('regression variant: room load aggregation 2',
   [[['MATH101H', 'R3', 3], ['MATH101H', 'R1', 3], ['CHEM120', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101H', 'R3', 'features', ['lab']], ['MATH101H', 'R1', 'features', ['lab']],
    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [6, 1]]]),
  ('partial repair guard 3',
   [[['PHYS110', 'R4', 2], ['MATH101', 'R1', 3], ['MATH101H', 'R1', 1], ['MATH101', 'R2', 3],
     ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('boundary control 4',
   [[['A', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['Lab']}],
   [['A', 'R3', 'features', ['lab']]]),
  ('normal control 5',
   [[['CHEM120', 'R3', 3], ['MATH101H', 'R3', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['accessible', 'computers'],
     'PHYS110': [],
     'CHEM120': ['accessible', 'Lab']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'lab']],
    ['MATH101H', 'R3', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 6',
   [[['CHEM120', 'R4', 1], ['CHEM120', 'R1', 2], ['MATH101', 'R1', 2], ['MATH101H', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [6, 2]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 3], ['MATH101', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
   [['PHYS110', 'R3', 'features', ['lab']], ['MATH101', 'R3', 'features', ['lab']],
    ['*', 'R3', 'capacity', [4, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R1', 2], ['CHEM120', 'R3', 2], ['CHEM120', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]], ['*', 'R3', 'capacity', [2, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 2], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 2], ['PHYS110', 'R1', 1], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 1],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['Lab'], 'CHEM120': ['computers', 'accessible']}],
   [['*', 'R1', 'capacity', [4, 2]], ['*', 'R2', 'capacity', [4, 3]]]),
  ('partial repair guard 3',
   [[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['PHYS110', 'R2', 2], ['MATH101H', 'R3', 2],
     ['MATH101', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['computers', 'Lab'],
     'PHYS110': ['Lab', 'computers'],
     'CHEM120': ['computers', 'accessible']}],
   [['MATH101H', 'R2', 'features', ['computers']], ['MATH101H', 'R4', 'features', ['computers']],
    ['PHYS110', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['computers', 'lab']],
    ['*', 'R2', 'capacity', [7, 3]], ['*', 'R3', 'capacity', [2, 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',
   [[['MATH101', 'R2', 1], ['CHEM120', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'computers'],
     'MATH101H': ['Lab', 'accessible'],
     'CHEM120': ['Lab', 'computers']}],
   [['MATH101', 'R2', 'features', ['accessible', 'computers']],
    ['CHEM120', 'R4', 'features', ['computers']]]),
  ('normal control 6',
   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R4', 3], ['MATH101', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'accessible'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
    ['MATH101', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 7',
   [[['MATH101', 'R2', 1], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [],
     'MATH101H': ['Lab', 'accessible'],
     'PHYS110': ['computers', 'accessible'],
     'CHEM120': ['accessible']}],
   [['*', 'R1', 'capacity', [3, 2]]]),
  ('normal control 8',
   [[['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['Lab', 'computers'], 'CHEM120': ['Lab', 'computers']}],
   [])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R3', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['PHYS110', 'R1', 3],
     ['PHYS110', 'R2', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R1', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible']], ['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 3], ['MATH101H', 'R3', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R3', 2],
     ['CHEM120', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible'], 'CHEM120': ['computers']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['MATH101H', 'R2', 'features', ['accessible']],
    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R1', 'capacity', [3, 2]],
    ['*', 'R2', 'capacity', [4, 3]], ['*', 'R3', 'capacity', [4, 1]]]),
  ('partial repair guard 3',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R4', 'capacity', [6, 4]]]),
  ('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',
   [[['MATH101H', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': ['Lab']}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 6',
   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 3], ['CHEM120', 'R4', 3], ['PHYS110', 'R3', 3],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['*', 'R3', 'capacity', [7, 1]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'MATH101H': [], 'CHEM120': []}],
   [['MATH101', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 8',
   [[['MATH101H', 'R1', 1], ['MATH101', 'R1', 3], ['CHEM120', 'R3', 2], ['PHYS110', 'R2', 1],
     ['MATH101', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': ['Lab']}],
   [['MATH101H', 'R1', 'features', ['lab']], ['CHEM120', 'R3', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [4, 2]],
    ['*', 'R3', 'capacity', [4, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 3], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R1', 3],
     ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible', 'computers'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': []}],
   [['MATH101H', 'R2', 'features', ['accessible', 'computers']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [6, 2]],
    ['*', 'R2', 'capacity', [8, 3]]]),
  ('regression variant: room load aggregation 2',
   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'CHEM120': ['accessible', 'computers']}],
   [['MATH101', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [4, 2]]]),
  ('partial repair guard 3',
   [[['MATH101', 'R3', 3], ['PHYS110', 'R3', 3], ['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [6, 1]]]),
  ('boundary control 4',
   [[['A', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['computers']}],
   []),
  ('normal control 5',
   [[['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'Lab'], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
   []),
  ('normal control 6',
   [[['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 7',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R1', 2], ['PHYS110', 'R3', 3], ['PHYS110', 'R3', 3],
     ['MATH101H', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['computers'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers']],
    ['MATH101H', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [6, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
   [['*', 'R3', 'capacity', [3, 1]]])]]
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 fixtureActualExpectedOutcome
regression: room load aggregation 1[][['*', 'R2', 'capacity', [4, 3]]]Failed
regression variant: room load aggregation 2[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [2, 1]]][['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]Failed
partial repair guard 3[][['*', 'R3', 'capacity', [3, 1]]]Failed
boundary control 4[][]Passed
normal control 5[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]]][['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]Failed
normal control 6[['CHEM120', 'R4', 'features', ['computers']]][['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]Failed
normal control 7[['MATH101H', 'R4', 'features', ['computers']]][['MATH101H', 'R4', 'features', ['computers']]]Passed
normal control 8[['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]][['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]]Passed

SHA-256 / c7e5136d0ad21f7a13f3a50157561e6594dae779a333f3e692be0c4bfaa4bcca

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({f.lower() for f in needs.get(ex, [])} - have)
        if miss:
            out.append([ex, room, 'features', miss])
        load[room] = max(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: room load aggregation 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: room load aggregation 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',
   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 2], ['MATH101', 'R4', 2], ['CHEM120', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['*', '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',
   [[['MATH101', 'R4', 3], ['CHEM120', 'R3', 2], ['MATH101H', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']],
    ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]),
  ('normal control 6',
   [[['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': ['computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]),
  ('normal control 7',
   [[['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers'], 'PHYS110': ['computers', 'accessible'], 'CHEM120': []}],
   [['MATH101H', 'R4', 'features', ['computers']]]),
  ('normal control 8',
   [[['MATH101', 'R4', 3], ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'Lab'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]])],
 [('regression: room load aggregation 1',
   [[['MATH101H', 'R3', 1], ['CHEM120', 'R3', 1], ['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': [], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('regression variant: room load aggregation 2',
   [[['MATH101H', 'R3', 3], ['MATH101H', 'R1', 3], ['CHEM120', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101H', 'R3', 'features', ['lab']], ['MATH101H', 'R1', 'features', ['lab']],
    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [6, 1]]]),
  ('partial repair guard 3',
   [[['PHYS110', 'R4', 2], ['MATH101', 'R1', 3], ['MATH101H', 'R1', 1], ['MATH101', 'R2', 3],
     ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('boundary control 4',
   [[['A', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['Lab']}],
   [['A', 'R3', 'features', ['lab']]]),
  ('normal control 5',
   [[['CHEM120', 'R3', 3], ['MATH101H', 'R3', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['accessible', 'computers'],
     'PHYS110': [],
     'CHEM120': ['accessible', 'Lab']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'lab']],
    ['MATH101H', 'R3', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 6',
   [[['CHEM120', 'R4', 1], ['CHEM120', 'R1', 2], ['MATH101', 'R1', 2], ['MATH101H', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [6, 2]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 3], ['MATH101', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
   [['PHYS110', 'R3', 'features', ['lab']], ['MATH101', 'R3', 'features', ['lab']],
    ['*', 'R3', 'capacity', [4, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R1', 2], ['CHEM120', 'R3', 2], ['CHEM120', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]], ['*', 'R3', 'capacity', [2, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 2], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 2], ['PHYS110', 'R1', 1], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 1],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['Lab'], 'CHEM120': ['computers', 'accessible']}],
   [['*', 'R1', 'capacity', [4, 2]], ['*', 'R2', 'capacity', [4, 3]]]),
  ('partial repair guard 3',
   [[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['PHYS110', 'R2', 2], ['MATH101H', 'R3', 2],
     ['MATH101', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['computers', 'Lab'],
     'PHYS110': ['Lab', 'computers'],
     'CHEM120': ['computers', 'accessible']}],
   [['MATH101H', 'R2', 'features', ['computers']], ['MATH101H', 'R4', 'features', ['computers']],
    ['PHYS110', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['computers', 'lab']],
    ['*', 'R2', 'capacity', [7, 3]], ['*', 'R3', 'capacity', [2, 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',
   [[['MATH101', 'R2', 1], ['CHEM120', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'computers'],
     'MATH101H': ['Lab', 'accessible'],
     'CHEM120': ['Lab', 'computers']}],
   [['MATH101', 'R2', 'features', ['accessible', 'computers']],
    ['CHEM120', 'R4', 'features', ['computers']]]),
  ('normal control 6',
   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R4', 3], ['MATH101', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'accessible'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
    ['MATH101', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 7',
   [[['MATH101', 'R2', 1], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [],
     'MATH101H': ['Lab', 'accessible'],
     'PHYS110': ['computers', 'accessible'],
     'CHEM120': ['accessible']}],
   [['*', 'R1', 'capacity', [3, 2]]]),
  ('normal control 8',
   [[['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['Lab', 'computers'], 'CHEM120': ['Lab', 'computers']}],
   [])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R3', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['PHYS110', 'R1', 3],
     ['PHYS110', 'R2', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R1', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible']], ['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 3], ['MATH101H', 'R3', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R3', 2],
     ['CHEM120', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible'], 'CHEM120': ['computers']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['MATH101H', 'R2', 'features', ['accessible']],
    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R1', 'capacity', [3, 2]],
    ['*', 'R2', 'capacity', [4, 3]], ['*', 'R3', 'capacity', [4, 1]]]),
  ('partial repair guard 3',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R4', 'capacity', [6, 4]]]),
  ('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',
   [[['MATH101H', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': ['Lab']}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 6',
   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 3], ['CHEM120', 'R4', 3], ['PHYS110', 'R3', 3],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['*', 'R3', 'capacity', [7, 1]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'MATH101H': [], 'CHEM120': []}],
   [['MATH101', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 8',
   [[['MATH101H', 'R1', 1], ['MATH101', 'R1', 3], ['CHEM120', 'R3', 2], ['PHYS110', 'R2', 1],
     ['MATH101', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': ['Lab']}],
   [['MATH101H', 'R1', 'features', ['lab']], ['CHEM120', 'R3', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [4, 2]],
    ['*', 'R3', 'capacity', [4, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 3], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R1', 3],
     ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible', 'computers'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': []}],
   [['MATH101H', 'R2', 'features', ['accessible', 'computers']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [6, 2]],
    ['*', 'R2', 'capacity', [8, 3]]]),
  ('regression variant: room load aggregation 2',
   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'CHEM120': ['accessible', 'computers']}],
   [['MATH101', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [4, 2]]]),
  ('partial repair guard 3',
   [[['MATH101', 'R3', 3], ['PHYS110', 'R3', 3], ['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [6, 1]]]),
  ('boundary control 4',
   [[['A', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['computers']}],
   []),
  ('normal control 5',
   [[['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'Lab'], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
   []),
  ('normal control 6',
   [[['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 7',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R1', 2], ['PHYS110', 'R3', 3], ['PHYS110', 'R3', 3],
     ['MATH101H', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['computers'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers']],
    ['MATH101H', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [6, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
   [['*', 'R3', 'capacity', [3, 1]]])]]
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 fixtureActualExpectedOutcome
regression: room load aggregation 1[][['*', 'R2', 'capacity', [4, 3]]]Failed
regression variant: room load aggregation 2[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [2, 1]]][['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]Failed
partial repair guard 3[['*', 'R3', 'capacity', [2, 1]]][['*', 'R3', 'capacity', [3, 1]]]Failed
boundary control 4[][]Passed
normal control 5[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]]][['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]Failed
normal control 6[['CHEM120', 'R4', 'features', ['computers']]][['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]Failed
normal control 7[['MATH101H', 'R4', 'features', ['computers']]][['MATH101H', 'R4', 'features', ['computers']]]Passed
normal control 8[['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]][['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]]Passed

SHA-256 / 8dee92f5f10fc8252f6215828e5c3ca0fc9d83cd3d1bacf557316df93894e0b5

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: room load aggregation 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: room load aggregation 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',
   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 2], ['MATH101', 'R4', 2], ['CHEM120', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['*', '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',
   [[['MATH101', 'R4', 3], ['CHEM120', 'R3', 2], ['MATH101H', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],
   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']],
    ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]),
  ('normal control 6',
   [[['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': ['computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]),
  ('normal control 7',
   [[['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers'], 'PHYS110': ['computers', 'accessible'], 'CHEM120': []}],
   [['MATH101H', 'R4', 'features', ['computers']]]),
  ('normal control 8',
   [[['MATH101', 'R4', 3], ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'Lab'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]])],
 [('regression: room load aggregation 1',
   [[['MATH101H', 'R3', 1], ['CHEM120', 'R3', 1], ['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': [], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('regression variant: room load aggregation 2',
   [[['MATH101H', 'R3', 3], ['MATH101H', 'R1', 3], ['CHEM120', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': [], 'CHEM120': []}],
   [['MATH101H', 'R3', 'features', ['lab']], ['MATH101H', 'R1', 'features', ['lab']],
    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [6, 1]]]),
  ('partial repair guard 3',
   [[['PHYS110', 'R4', 2], ['MATH101', 'R1', 3], ['MATH101H', 'R1', 1], ['MATH101', 'R2', 3],
     ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('boundary control 4',
   [[['A', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['Lab']}],
   [['A', 'R3', 'features', ['lab']]]),
  ('normal control 5',
   [[['CHEM120', 'R3', 3], ['MATH101H', 'R3', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['accessible', 'computers'],
     'PHYS110': [],
     'CHEM120': ['accessible', 'Lab']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'lab']],
    ['MATH101H', 'R3', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 6',
   [[['CHEM120', 'R4', 1], ['CHEM120', 'R1', 2], ['MATH101', 'R1', 2], ['MATH101H', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [6, 2]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 3], ['MATH101', 'R3', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],
   [['PHYS110', 'R3', 'features', ['lab']], ['MATH101', 'R3', 'features', ['lab']],
    ['*', 'R3', 'capacity', [4, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R1', 2], ['CHEM120', 'R3', 2], ['CHEM120', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]], ['*', 'R3', 'capacity', [2, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 2], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': []}],
   [['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 2], ['PHYS110', 'R1', 1], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 1],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['Lab'], 'CHEM120': ['computers', 'accessible']}],
   [['*', 'R1', 'capacity', [4, 2]], ['*', 'R2', 'capacity', [4, 3]]]),
  ('partial repair guard 3',
   [[['MATH101H', 'R2', 2], ['MATH101H', 'R4', 1], ['PHYS110', 'R2', 2], ['MATH101H', 'R3', 2],
     ['MATH101', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'],
     'MATH101H': ['computers', 'Lab'],
     'PHYS110': ['Lab', 'computers'],
     'CHEM120': ['computers', 'accessible']}],
   [['MATH101H', 'R2', 'features', ['computers']], ['MATH101H', 'R4', 'features', ['computers']],
    ['PHYS110', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['computers', 'lab']],
    ['*', 'R2', 'capacity', [7, 3]], ['*', 'R3', 'capacity', [2, 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',
   [[['MATH101', 'R2', 1], ['CHEM120', 'R4', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'computers'],
     'MATH101H': ['Lab', 'accessible'],
     'CHEM120': ['Lab', 'computers']}],
   [['MATH101', 'R2', 'features', ['accessible', 'computers']],
    ['CHEM120', 'R4', 'features', ['computers']]]),
  ('normal control 6',
   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R4', 3], ['MATH101', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers', 'accessible'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],
    ['MATH101', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [5, 1]]]),
  ('normal control 7',
   [[['MATH101', 'R2', 1], ['PHYS110', 'R1', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [],
     'MATH101H': ['Lab', 'accessible'],
     'PHYS110': ['computers', 'accessible'],
     'CHEM120': ['accessible']}],
   [['*', 'R1', 'capacity', [3, 2]]]),
  ('normal control 8',
   [[['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['Lab', 'computers'], 'CHEM120': ['Lab', 'computers']}],
   [])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R3', 1], ['CHEM120', 'R1', 1], ['CHEM120', 'R1', 1], ['PHYS110', 'R1', 3],
     ['PHYS110', 'R2', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R3', 'features', ['accessible', 'computers']], ['PHYS110', 'R1', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible']], ['*', 'R1', 'capacity', [5, 2]]]),
  ('regression variant: room load aggregation 2',
   [[['PHYS110', 'R1', 3], ['MATH101H', 'R3', 2], ['MATH101H', 'R2', 1], ['PHYS110', 'R3', 2],
     ['CHEM120', 'R2', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible'], 'CHEM120': ['computers']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['MATH101H', 'R2', 'features', ['accessible']],
    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R1', 'capacity', [3, 2]],
    ['*', 'R2', 'capacity', [4, 3]], ['*', 'R3', 'capacity', [4, 1]]]),
  ('partial repair guard 3',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R4', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible'], 'PHYS110': ['Lab'], 'CHEM120': ['accessible', 'computers']}],
   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R4', 'capacity', [6, 4]]]),
  ('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',
   [[['MATH101H', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': ['Lab']}],
   [['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 6',
   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 3], ['CHEM120', 'R4', 3], ['PHYS110', 'R3', 3],
     ['MATH101', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['accessible']}],
   [['MATH101H', 'R3', 'features', ['accessible']], ['*', 'R3', 'capacity', [7, 1]]]),
  ('normal control 7',
   [[['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2], ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible'], 'MATH101H': [], 'CHEM120': []}],
   [['MATH101', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [2, 1]]]),
  ('normal control 8',
   [[['MATH101H', 'R1', 1], ['MATH101', 'R1', 3], ['CHEM120', 'R3', 2], ['PHYS110', 'R2', 1],
     ['MATH101', 'R3', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': ['Lab']}],
   [['MATH101H', 'R1', 'features', ['lab']], ['CHEM120', 'R3', 'features', ['lab']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [4, 2]],
    ['*', 'R3', 'capacity', [4, 1]]])],
 [('regression: room load aggregation 1',
   [[['CHEM120', 'R1', 3], ['MATH101H', 'R2', 3], ['PHYS110', 'R2', 3], ['CHEM120', 'R1', 3],
     ['MATH101', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101H': ['accessible', 'computers'], 'PHYS110': ['accessible', 'computers'], 'CHEM120': []}],
   [['MATH101H', 'R2', 'features', ['accessible', 'computers']],
    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R1', 'capacity', [6, 2]],
    ['*', 'R2', 'capacity', [8, 3]]]),
  ('regression variant: room load aggregation 2',
   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['PHYS110', 'R1', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'MATH101H': [], 'CHEM120': ['accessible', 'computers']}],
   [['MATH101', 'R4', 'features', ['computers']], ['*', 'R1', 'capacity', [4, 2]]]),
  ('partial repair guard 3',
   [[['MATH101', 'R3', 3], ['PHYS110', 'R3', 3], ['MATH101', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'CHEM120': []}],
   [['*', 'R3', 'capacity', [6, 1]]]),
  ('boundary control 4',
   [[['A', 'R1', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'A': ['computers']}],
   []),
  ('normal control 5',
   [[['MATH101H', 'R4', 1]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['accessible', 'Lab'], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],
   []),
  ('normal control 6',
   [[['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 7',
   [[['CHEM120', 'R4', 3], ['MATH101H', 'R1', 2], ['PHYS110', 'R3', 3], ['PHYS110', 'R3', 3],
     ['MATH101H', 'R2', 2]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['computers'], 'CHEM120': []}],
   [['PHYS110', 'R3', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers']],
    ['MATH101H', 'R2', 'features', ['accessible']], ['*', 'R3', 'capacity', [6, 1]]]),
  ('normal control 8',
   [[['PHYS110', 'R3', 3]],
    {'R1': [2, ['Computers', 'accessible']],
     'R2': [3, ['lab']],
     'R3': [1, []],
     'R4': [4, ['ACCESSIBLE', 'lab']]},
    {'MATH101': ['computers'], 'CHEM120': ['accessible', 'Lab']}],
   [['*', 'R3', 'capacity', [3, 1]]])]]
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 fixtureActualExpectedOutcome
regression: room load aggregation 1[['*', 'R2', 'capacity', [4, 3]]][['*', 'R2', 'capacity', [4, 3]]]Passed
regression variant: room load aggregation 2[['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]][['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]Passed
partial repair guard 3[['*', 'R3', 'capacity', [3, 1]]][['*', 'R3', 'capacity', [3, 1]]]Passed
boundary control 4[][]Passed
normal control 5[['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]][['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101H', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [2, 1]], ['*', 'R4', 'capacity', [5, 4]]]Passed
normal control 6[['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]][['CHEM120', 'R4', 'features', ['computers']], ['*', 'R2', 'capacity', [6, 3]]]Passed
normal control 7[['MATH101H', 'R4', 'features', ['computers']]][['MATH101H', 'R4', 'features', ['computers']]]Passed
normal control 8[['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]][['MATH101', 'R4', 'features', ['computers']], ['MATH101', 'R1', 'features', ['lab']]]Passed

SHA-256 / 025bbbe0a760348744bca77bb2a077d818236c3e90fb59ad2170634ee3243381

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.481581+00:00.

Case digest / 5c33e6c063b47d553889751d0181ec8b620be338a7b5798c860a74eff9138b6a