{"abstract":"Well-equipped rooms are rejected and bare rooms accepted.","category":"Exam timetabling constraints","checks":8,"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.","evaluation_group":"w2-exam-timetabling-constraints-room-suitability-and-load","failed_approach":"The symmetric difference also reports unneeded room features.","family":"w2-exam-timetabling-constraints-room-suitability-and-load-feature-subset-direction","id":"FA-94766","implementations":{"attempt":{"sha256":"78193e36ee87727ea23ee026e4a7c870be585b8aaff863fb4f7c657e84d5ee4f","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(placements, rooms, needs):\n    out = []\n    load = {}\n    for ex, room, seats in placements:\n        cap, fl = rooms[room]\n        have = {f.lower() for f in fl}\n        miss = sorted(have ^ {f.lower() for f in needs.get(ex, [])})\n        if miss:\n            out.append([ex, room, 'features', miss])\n        load[room] = load.get(room, 0) + seats\n    for room in sorted(load):\n        if load[room] > rooms[room][0]:\n            out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: feature subset direction 1',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('regression variant: feature subset direction 2',\n   [[['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['computers']]]),\n  ('partial repair guard 3',\n   [[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   []),\n  ('normal control 5',\n   [[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],\n     ['MATH101H', 'R4', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],\n     ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [],\n     'MATH101H': ['Lab'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['CHEM120', 'R3', 'features', ['accessible', 'computers']],\n    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 8',\n   [[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers'],\n     'PHYS110': [],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],\n [('regression: feature subset direction 1',\n   [[['A', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   [['A', 'R3', 'features', ['lab']]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],\n     ['MATH101', 'R3', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],\n   [['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],\n    ['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],\n    ['*', 'R3', 'capacity', [5, 1]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'CHEM120': []}],\n   [['*', 'R2', 'capacity', [6, 3]]]),\n  ('normal control 4',\n   [[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'MATH101H': [],\n     'PHYS110': ['accessible', 'Lab'],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],\n    ['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers', 'Lab'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],\n    ['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['accessible', 'Lab']}],\n   []),\n  ('normal control 5',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 6',\n   [[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'],\n     'MATH101H': [],\n     'PHYS110': ['Lab', 'accessible'],\n     'CHEM120': ['accessible', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['accessible']]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'],\n     'MATH101H': ['computers', 'accessible'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['MATH101H', 'R4', 'features', ['computers']]]),\n  ('normal control 8',\n   [[['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'PHYS110': ['accessible', 'computers'],\n     'CHEM120': ['Lab', 'computers']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': ['Lab', 'accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible', 'computers']],\n    ['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101H', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   []),\n  ('partial repair guard 3',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],\n     ['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],\n   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],\n    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],\n   [['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 8',\n   [[['MATH101', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible']]])],\n [('regression: feature subset direction 1',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],\n     ['MATH101', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],\n   [['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],\n    ['*', 'R1', 'capacity', [3, 2]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],\n   []),\n  ('boundary control 4',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('normal control 5',\n   [[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],\n   [['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],\n   [['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"82fd7e8b652adffe43481bcc44aa634d3c5edddce26e36539ca525069e7ea74d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(placements, rooms, needs):\n    out = []\n    load = {}\n    for ex, room, seats in placements:\n        cap, fl = rooms[room]\n        have = {f.lower() for f in fl}\n        miss = sorted(have - {f.lower() for f in needs.get(ex, [])})\n        if miss:\n            out.append([ex, room, 'features', miss])\n        load[room] = load.get(room, 0) + seats\n    for room in sorted(load):\n        if load[room] > rooms[room][0]:\n            out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: feature subset direction 1',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('regression variant: feature subset direction 2',\n   [[['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['computers']]]),\n  ('partial repair guard 3',\n   [[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   []),\n  ('normal control 5',\n   [[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],\n     ['MATH101H', 'R4', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],\n     ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [],\n     'MATH101H': ['Lab'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['CHEM120', 'R3', 'features', ['accessible', 'computers']],\n    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 8',\n   [[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers'],\n     'PHYS110': [],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],\n [('regression: feature subset direction 1',\n   [[['A', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   [['A', 'R3', 'features', ['lab']]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],\n     ['MATH101', 'R3', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],\n   [['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],\n    ['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],\n    ['*', 'R3', 'capacity', [5, 1]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'CHEM120': []}],\n   [['*', 'R2', 'capacity', [6, 3]]]),\n  ('normal control 4',\n   [[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'MATH101H': [],\n     'PHYS110': ['accessible', 'Lab'],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],\n    ['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers', 'Lab'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],\n    ['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['accessible', 'Lab']}],\n   []),\n  ('normal control 5',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 6',\n   [[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'],\n     'MATH101H': [],\n     'PHYS110': ['Lab', 'accessible'],\n     'CHEM120': ['accessible', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['accessible']]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'],\n     'MATH101H': ['computers', 'accessible'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['MATH101H', 'R4', 'features', ['computers']]]),\n  ('normal control 8',\n   [[['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'PHYS110': ['accessible', 'computers'],\n     'CHEM120': ['Lab', 'computers']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': ['Lab', 'accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible', 'computers']],\n    ['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101H', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   []),\n  ('partial repair guard 3',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],\n     ['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],\n   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],\n    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],\n   [['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 8',\n   [[['MATH101', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible']]])],\n [('regression: feature subset direction 1',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],\n     ['MATH101', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],\n   [['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],\n    ['*', 'R1', 'capacity', [3, 2]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],\n   []),\n  ('boundary control 4',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('normal control 5',\n   [[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],\n   [['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],\n   [['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"10cdb723b22fa51bc3ac1595e3da3211c0f99edf2cfb8b9c1cd3ec763dfd27df","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(placements, rooms, needs):\n    out = []\n    load = {}\n    for ex, room, seats in placements:\n        cap, fl = rooms[room]\n        have = {f.lower() for f in fl}\n        miss = sorted({f.lower() for f in needs.get(ex, [])} - have)\n        if miss:\n            out.append([ex, room, 'features', miss])\n        load[room] = load.get(room, 0) + seats\n    for room in sorted(load):\n        if load[room] > rooms[room][0]:\n            out.append(['*', room, 'capacity', [load[room], rooms[room][0]]])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: feature subset direction 1',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('regression variant: feature subset direction 2',\n   [[['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['computers', 'accessible'], 'PHYS110': ['Lab', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['computers']]]),\n  ('partial repair guard 3',\n   [[['MATH101H', 'R1', 1], ['CHEM120', 'R2', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'PHYS110': ['computers'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   []),\n  ('normal control 5',\n   [[['CHEM120', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R4', 3], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': [], 'PHYS110': ['Lab'], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R1', 1], ['PHYS110', 'R1', 1], ['PHYS110', 'R3', 2], ['CHEM120', 'R1', 2],\n     ['MATH101H', 'R4', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab', 'computers']}],\n   [['CHEM120', 'R1', 'features', ['lab']], ['*', 'R1', 'capacity', [4, 2]],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R4', 1], ['MATH101', 'R3', 1], ['MATH101', 'R1', 1], ['CHEM120', 'R3', 3],\n     ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [],\n     'MATH101H': ['Lab'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['CHEM120', 'R3', 'features', ['accessible', 'computers']],\n    ['PHYS110', 'R2', 'features', ['accessible', 'computers']], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 8',\n   [[['CHEM120', 'R3', 1], ['MATH101', 'R1', 1], ['PHYS110', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers'],\n     'PHYS110': [],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']]])],\n [('regression: feature subset direction 1',\n   [[['A', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['Lab']}],\n   [['A', 'R3', 'features', ['lab']]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R2', 1], ['MATH101H', 'R3', 3], ['MATH101H', 'R1', 1], ['MATH101H', 'R1', 2],\n     ['MATH101', 'R3', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'], 'MATH101H': ['accessible'], 'PHYS110': [], 'CHEM120': ['Lab']}],\n   [['MATH101', 'R2', 'features', ['computers']], ['MATH101H', 'R3', 'features', ['accessible']],\n    ['MATH101', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [3, 2]],\n    ['*', 'R3', 'capacity', [5, 1]]]),\n  ('partial repair guard 3',\n   [[['CHEM120', 'R1', 1], ['MATH101', 'R4', 2], ['CHEM120', 'R2', 3], ['MATH101', 'R2', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'CHEM120': []}],\n   [['*', 'R2', 'capacity', [6, 3]]]),\n  ('normal control 4',\n   [[['MATH101H', 'R3', 1], ['CHEM120', 'R2', 3], ['CHEM120', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'MATH101H': [],\n     'PHYS110': ['accessible', 'Lab'],\n     'CHEM120': ['computers', 'Lab']}],\n   [['CHEM120', 'R2', 'features', ['computers']], ['CHEM120', 'R2', 'features', ['computers']],\n    ['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['MATH101', 'R3', 3], ['MATH101H', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['computers'], 'CHEM120': ['accessible', 'Lab']}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['CHEM120', 'R1', 3], ['MATH101', 'R4', 1], ['MATH101H', 'R3', 3], ['CHEM120', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['Lab', 'computers'], 'PHYS110': ['Lab', 'accessible'], 'CHEM120': []}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R1', 'capacity', [6, 2]],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 2], ['MATH101', 'R1', 3], ['MATH101', 'R2', 3], ['CHEM120', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'accessible'],\n     'MATH101H': ['computers', 'Lab'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [['MATH101H', 'R3', 'features', ['computers', 'lab']], ['MATH101', 'R1', 'features', ['lab']],\n    ['MATH101', 'R2', 'features', ['accessible']], ['CHEM120', 'R2', 'features', ['accessible']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R2', 'capacity', [5, 3]], ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R1', 2], ['PHYS110', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': [],\n     'CHEM120': ['Lab', 'accessible']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R1', 3], ['MATH101', 'R3', 1], ['MATH101', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['Lab', 'computers'], 'PHYS110': ['computers'], 'CHEM120': ['Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [4, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['accessible', 'Lab']}],\n   []),\n  ('normal control 5',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('normal control 6',\n   [[['PHYS110', 'R2', 3], ['CHEM120', 'R1', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'],\n     'MATH101H': [],\n     'PHYS110': ['Lab', 'accessible'],\n     'CHEM120': ['accessible', 'computers']}],\n   [['PHYS110', 'R2', 'features', ['accessible']]]),\n  ('normal control 7',\n   [[['MATH101H', 'R2', 2], ['CHEM120', 'R4', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'],\n     'MATH101H': ['computers', 'accessible'],\n     'PHYS110': ['computers', 'accessible'],\n     'CHEM120': ['computers', 'accessible']}],\n   [['MATH101H', 'R2', 'features', ['accessible', 'computers']], ['CHEM120', 'R4', 'features', ['computers']],\n    ['MATH101H', 'R4', 'features', ['computers']]]),\n  ('normal control 8',\n   [[['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'accessible'],\n     'PHYS110': ['accessible', 'computers'],\n     'CHEM120': ['Lab', 'computers']}],\n   [])],\n [('regression: feature subset direction 1',\n   [[['MATH101', 'R2', 2], ['MATH101H', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible', 'computers'],\n     'MATH101H': ['Lab', 'computers'],\n     'PHYS110': ['Lab', 'accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible', 'computers']],\n    ['MATH101H', 'R3', 'features', ['computers', 'lab']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['MATH101H', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   []),\n  ('partial repair guard 3',\n   [[['MATH101', 'R3', 1], ['PHYS110', 'R4', 3], ['PHYS110', 'R3', 2], ['MATH101', 'R1', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers', 'Lab'], 'PHYS110': ['computers', 'Lab'], 'CHEM120': []}],\n   [['PHYS110', 'R4', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R1', 'capacity', [3, 2]], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('boundary control 4',\n   [[['A', 'R2', 2], ['B', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {}],\n   [['*', 'R2', 'capacity', [4, 3]]]),\n  ('normal control 5',\n   [[['PHYS110', 'R3', 3], ['PHYS110', 'R3', 1], ['CHEM120', 'R2', 3], ['MATH101', 'R4', 2],\n     ['PHYS110', 'R2', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['computers', 'Lab'], 'PHYS110': ['Lab'], 'CHEM120': ['computers']}],\n   [['PHYS110', 'R3', 'features', ['lab']], ['PHYS110', 'R3', 'features', ['lab']],\n    ['CHEM120', 'R2', 'features', ['computers']], ['*', 'R2', 'capacity', [5, 3]],\n    ['*', 'R3', 'capacity', [4, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R3', 3], ['CHEM120', 'R2', 2], ['MATH101H', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': [], 'PHYS110': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['MATH101H', 'R3', 1], ['MATH101', 'R3', 2], ['PHYS110', 'R2', 3], ['MATH101H', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['computers']}],\n   [['MATH101', 'R3', 'features', ['lab']], ['PHYS110', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 8',\n   [[['MATH101', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['accessible'], 'MATH101H': [], 'PHYS110': ['accessible'], 'CHEM120': ['accessible']}],\n   [['MATH101', 'R2', 'features', ['accessible']]])],\n [('regression: feature subset direction 1',\n   [[['MATH101H', 'R1', 2], ['PHYS110', 'R3', 2], ['MATH101H', 'R2', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': ['accessible', 'Lab'], 'CHEM120': []}],\n   [['MATH101H', 'R1', 'features', ['lab']], ['MATH101H', 'R2', 'features', ['accessible']],\n    ['*', 'R3', 'capacity', [2, 1]]]),\n  ('regression variant: feature subset direction 2',\n   [[['CHEM120', 'R1', 1], ['MATH101H', 'R2', 2], ['MATH101H', 'R3', 1], ['MATH101', 'R1', 2],\n     ['MATH101', 'R4', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers', 'Lab'], 'PHYS110': ['accessible', 'Lab']}],\n   [['MATH101', 'R1', 'features', ['lab']], ['MATH101', 'R4', 'features', ['computers']],\n    ['*', 'R1', 'capacity', [3, 2]]]),\n  ('partial repair guard 3',\n   [[['PHYS110', 'R4', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'MATH101H': [], 'PHYS110': [], 'CHEM120': ['computers']}],\n   []),\n  ('boundary control 4',\n   [[['A', 'R1', 2]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'A': ['computers']}],\n   []),\n  ('normal control 5',\n   [[['PHYS110', 'R2', 3], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101H': ['computers'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': []}],\n   [['PHYS110', 'R2', 'features', ['computers']], ['PHYS110', 'R3', 'features', ['computers', 'lab']],\n    ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 6',\n   [[['MATH101H', 'R2', 3], ['CHEM120', 'R4', 1], ['PHYS110', 'R3', 3]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': [], 'MATH101H': [], 'CHEM120': ['computers']}],\n   [['CHEM120', 'R4', 'features', ['computers']], ['*', 'R3', 'capacity', [3, 1]]]),\n  ('normal control 7',\n   [[['PHYS110', 'R1', 3], ['MATH101H', 'R4', 2], ['MATH101H', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['computers'], 'PHYS110': [], 'CHEM120': ['computers', 'Lab']}],\n   [['*', 'R1', 'capacity', [3, 2]]]),\n  ('normal control 8',\n   [[['PHYS110', 'R3', 1]],\n    {'R1': [2, ['Computers', 'accessible']],\n     'R2': [3, ['lab']],\n     'R3': [1, []],\n     'R4': [4, ['ACCESSIBLE', 'lab']]},\n    {'MATH101': ['Lab'], 'MATH101H': ['accessible'], 'PHYS110': ['Lab', 'computers'], 'CHEM120': ['Lab']}],\n   [['PHYS110', 'R3', 'features', ['computers', 'lab']]])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-exam-timetabling-constraints-room-suitability-and-load-feature-subset-direction","generated_at":"2026-09-29T14:52:07.389422+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Room suitability (labs, computers, accessibility) and capacity are hard constraints of room allocation.","repair":"Missing = required features minus room features.","root_cause":"Missing features are computed as room features not required.","sha256":"6c2b97330725e08e3fc465b98e036c2910ddeacc50d1a828da9ae3e7e5f0da42","title":"Room features compared in the wrong subset direction · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":43.642,"exit_code":1,"observations":[{"actual":[["A","R1","features",["accessible"]]],"check":"regression: feature subset direction 1","expected":[],"passed":false},{"actual":[["PHYS110","R2","features",["computers"]]],"check":"regression variant: feature subset direction 2","expected":[["PHYS110","R2","features",["computers"]]],"passed":true},{"actual":[["MATH101H","R1","features",["accessible","computers"]],["CHEM120","R2","features",["computers"]],["*","R3","capacity",[3,1]]],"check":"partial repair guard 3","expected":[["CHEM120","R2","features",["computers"]],["*","R3","capacity",[3,1]]],"passed":false},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["CHEM120","R4","features",["accessible","computers"]],["CHEM120","R4","features",["accessible","computers"]],["*","R3","capacity",[4,1]]],"check":"normal control 5","expected":[["CHEM120","R4","features",["computers"]],["CHEM120","R4","features",["computers"]],["*","R3","capacity",[4,1]]],"passed":false},{"actual":[["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]]],"check":"normal control 6","expected":[["CHEM120","R1","features",["lab"]],["*","R1","capacity",[4,2]],["*","R3","capacity",[2,1]]],"passed":false},{"actual":[["MATH101H","R4","features",["accessible"]],["MATH101","R1","features",["accessible","computers"]],["CHEM120","R3","features",["accessible","computers"]],["PHYS110","R2","features",["accessible","computers","lab"]],["*","R3","capacity",[4,1]]],"check":"normal control 7","expected":[["CHEM120","R3","features",["accessible","computers"]],["PHYS110","R2","features",["accessible","computers"]],["*","R3","capacity",[4,1]]],"passed":false},{"actual":[["CHEM120","R3","features",["computers","lab"]],["MATH101","R1","features",["computers","lab"]],["PHYS110","R2","features",["lab"]]],"check":"normal control 8","expected":[["CHEM120","R3","features",["computers","lab"]],["MATH101","R1","features",["lab"]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: feature subset direction 1\", \"actual\": [[\"A\", \"R1\", \"features\", [\"accessible\"]]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: feature subset direction 2\", \"actual\": [[\"PHYS110\", \"R2\", \"features\", [\"computers\"]]], \"expected\": [[\"PHYS110\", \"R2\", \"features\", [\"computers\"]]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"MATH101H\", \"R1\", \"features\", [\"accessible\", \"computers\"]], [\"CHEM120\", \"R2\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"expected\": [[\"CHEM120\", \"R2\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [[\"CHEM120\", \"R4\", \"features\", [\"accessible\", \"computers\"]], [\"CHEM120\", \"R4\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"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]]], \"expected\": [[\"CHEM120\", \"R1\", \"features\", [\"lab\"]], [\"*\", \"R1\", \"capacity\", [4, 2]], [\"*\", \"R3\", \"capacity\", [2, 1]]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"MATH101H\", \"R4\", \"features\", [\"accessible\"]], [\"MATH101\", \"R1\", \"features\", [\"accessible\", \"computers\"]], [\"CHEM120\", \"R3\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"accessible\", \"computers\", \"lab\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [[\"CHEM120\", \"R3\", \"features\", [\"computers\", \"lab\"]], [\"MATH101\", \"R1\", \"features\", [\"computers\", \"lab\"]], [\"PHYS110\", \"R2\", \"features\", [\"lab\"]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"computers\", \"lab\"]], [\"MATH101\", \"R1\", \"features\", [\"lab\"]]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.142,"exit_code":1,"observations":[{"actual":[["A","R1","features",["accessible"]]],"check":"regression: feature subset direction 1","expected":[],"passed":false},{"actual":[],"check":"regression variant: feature subset direction 2","expected":[["PHYS110","R2","features",["computers"]]],"passed":false},{"actual":[["MATH101H","R1","features",["accessible","computers"]],["*","R3","capacity",[3,1]]],"check":"partial repair guard 3","expected":[["CHEM120","R2","features",["computers"]],["*","R3","capacity",[3,1]]],"passed":false},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["CHEM120","R4","features",["accessible"]],["CHEM120","R4","features",["accessible"]],["*","R3","capacity",[4,1]]],"check":"normal control 5","expected":[["CHEM120","R4","features",["computers"]],["CHEM120","R4","features",["computers"]],["*","R3","capacity",[4,1]]],"passed":false},{"actual":[["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]]],"check":"normal control 6","expected":[["CHEM120","R1","features",["lab"]],["*","R1","capacity",[4,2]],["*","R3","capacity",[2,1]]],"passed":false},{"actual":[["MATH101H","R4","features",["accessible"]],["MATH101","R1","features",["accessible","computers"]],["PHYS110","R2","features",["lab"]],["*","R3","capacity",[4,1]]],"check":"normal control 7","expected":[["CHEM120","R3","features",["accessible","computers"]],["PHYS110","R2","features",["accessible","computers"]],["*","R3","capacity",[4,1]]],"passed":false},{"actual":[["MATH101","R1","features",["computers"]],["PHYS110","R2","features",["lab"]]],"check":"normal control 8","expected":[["CHEM120","R3","features",["computers","lab"]],["MATH101","R1","features",["lab"]]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: feature subset direction 1\", \"actual\": [[\"A\", \"R1\", \"features\", [\"accessible\"]]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: feature subset direction 2\", \"actual\": [], \"expected\": [[\"PHYS110\", \"R2\", \"features\", [\"computers\"]]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"MATH101H\", \"R1\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"expected\": [[\"CHEM120\", \"R2\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [[\"CHEM120\", \"R4\", \"features\", [\"accessible\"]], [\"CHEM120\", \"R4\", \"features\", [\"accessible\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": false}, {\"check\": \"normal control 6\", \"actual\": [[\"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]]], \"expected\": [[\"CHEM120\", \"R1\", \"features\", [\"lab\"]], [\"*\", \"R1\", \"capacity\", [4, 2]], [\"*\", \"R3\", \"capacity\", [2, 1]]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"MATH101H\", \"R4\", \"features\", [\"accessible\"]], [\"MATH101\", \"R1\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"lab\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": false}, {\"check\": \"normal control 8\", \"actual\": [[\"MATH101\", \"R1\", \"features\", [\"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"lab\"]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"computers\", \"lab\"]], [\"MATH101\", \"R1\", \"features\", [\"lab\"]]], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.425,"exit_code":0,"observations":[{"actual":[],"check":"regression: feature subset direction 1","expected":[],"passed":true},{"actual":[["PHYS110","R2","features",["computers"]]],"check":"regression variant: feature subset direction 2","expected":[["PHYS110","R2","features",["computers"]]],"passed":true},{"actual":[["CHEM120","R2","features",["computers"]],["*","R3","capacity",[3,1]]],"check":"partial repair guard 3","expected":[["CHEM120","R2","features",["computers"]],["*","R3","capacity",[3,1]]],"passed":true},{"actual":[],"check":"boundary control 4","expected":[],"passed":true},{"actual":[["CHEM120","R4","features",["computers"]],["CHEM120","R4","features",["computers"]],["*","R3","capacity",[4,1]]],"check":"normal control 5","expected":[["CHEM120","R4","features",["computers"]],["CHEM120","R4","features",["computers"]],["*","R3","capacity",[4,1]]],"passed":true},{"actual":[["CHEM120","R1","features",["lab"]],["*","R1","capacity",[4,2]],["*","R3","capacity",[2,1]]],"check":"normal control 6","expected":[["CHEM120","R1","features",["lab"]],["*","R1","capacity",[4,2]],["*","R3","capacity",[2,1]]],"passed":true},{"actual":[["CHEM120","R3","features",["accessible","computers"]],["PHYS110","R2","features",["accessible","computers"]],["*","R3","capacity",[4,1]]],"check":"normal control 7","expected":[["CHEM120","R3","features",["accessible","computers"]],["PHYS110","R2","features",["accessible","computers"]],["*","R3","capacity",[4,1]]],"passed":true},{"actual":[["CHEM120","R3","features",["computers","lab"]],["MATH101","R1","features",["lab"]]],"check":"normal control 8","expected":[["CHEM120","R3","features",["computers","lab"]],["MATH101","R1","features",["lab"]]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: feature subset direction 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"regression variant: feature subset direction 2\", \"actual\": [[\"PHYS110\", \"R2\", \"features\", [\"computers\"]]], \"expected\": [[\"PHYS110\", \"R2\", \"features\", [\"computers\"]]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"CHEM120\", \"R2\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"expected\": [[\"CHEM120\", \"R2\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [3, 1]]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [[\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"CHEM120\", \"R4\", \"features\", [\"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"CHEM120\", \"R1\", \"features\", [\"lab\"]], [\"*\", \"R1\", \"capacity\", [4, 2]], [\"*\", \"R3\", \"capacity\", [2, 1]]], \"expected\": [[\"CHEM120\", \"R1\", \"features\", [\"lab\"]], [\"*\", \"R1\", \"capacity\", [4, 2]], [\"*\", \"R3\", \"capacity\", [2, 1]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"CHEM120\", \"R3\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"accessible\", \"computers\"]], [\"PHYS110\", \"R2\", \"features\", [\"accessible\", \"computers\"]], [\"*\", \"R3\", \"capacity\", [4, 1]]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"CHEM120\", \"R3\", \"features\", [\"computers\", \"lab\"]], [\"MATH101\", \"R1\", \"features\", [\"lab\"]]], \"expected\": [[\"CHEM120\", \"R3\", \"features\", [\"computers\", \"lab\"]], [\"MATH101\", \"R1\", \"features\", [\"lab\"]]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}