FAILURE MAP
← Case archive

FA-94346 / Exam timetabling constraints / Open access

Cross-listed course codes treated as separate papers · case 01

Students in a cross-listed paper are shown clashing with themselves.

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

ROOT CAUSE

Exam ids are not mapped to their cross-listing canonical paper.

VERIFIED REPAIR

Map each exam to the smallest id of its cross-listing group.

Unsuccessful approach: Using the first listed id makes canonical names depend on list order.

Case contract

enrol rows [student, exam] (may repeat), period maps scheduled exams to a period, xlist groups cross-listed exams that are one physical paper (canonical name = smallest id in the group). A clash is a student with two or more distinct canonical papers in one period; unscheduled exams are ignored. Return [student, period, sorted papers] ordered by student then period.

Why this case matters

Clash detection is the primary hard constraint of exam timetabling; duplicate enrolments and cross-listing are the usual sources of false clashes.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(enrol, period, xlist):
    canon = {}
    for g in xlist:
        for e in g:
            canon[e] = min(g)
    slots = {}
    for st, ex in enrol:
        if ex not in period:
            continue
        slots.setdefault((st, period[ex]), set()).add(ex)
    out = []
    for (st, p), papers in sorted(slots.items()):
        if len(papers) > 1:
            out.append([st, p, sorted(papers)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cross listed paper 1',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('regression variant: cross listed paper 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],
     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'CHEM120'], ['s3', 'HIST140']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],
    ['s5', 1, ['BIO130', 'PHYS110']]]),
  ('partial repair guard 3',
   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],
     ['s2', 'BIO130'], ['s4', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],
    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),
  ('normal control 5',
   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 6',
   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],
     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],
     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],
   [['s1', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],
     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s3', 2, ['CHEM120', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],
     ['s2', 'MATH101'], ['s4', 'ECON150']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['HIST140', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],
     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],
     ['s1', 'CHEM120'], ['s4', 'PHYS110']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],
    ['s5', 0, ['ECON150', 'HIST140']]]),
  ('boundary control 4',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('normal control 5',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],
     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],
   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],
     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],
     ['s4', 'MATH101H'], ['s1', 'CHEM120']],
    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],
     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],
     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],
     ['s5', 'ECON150']],
    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},
    []],
   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),
  ('normal control 5',
   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],
     ['s2', 'CHEM120']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['BIO130', 'CHEM120']]]),
  ('normal control 6',
   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],
   [['s3', 2, ['CHEM120', 'MATH101H']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 8',
   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],
     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],
     ['s3', 'CHEM120'], ['s1', 'HIST140']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],
     ['s5', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],
    ['s5', 2, ['CHEM120', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],
     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],
     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],
    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],
     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],
     ['s2', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],
    ['s5', 3, ['CHEM120', 'HIST140']]]),
  ('normal control 6',
   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],
     ['s3', 'PHYS110'], ['s3', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 2, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],
    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],
   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],
     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 3, ['HIST140', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],
     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],
     ['s2', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),
  ('partial repair guard 3',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],
     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 0, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s5', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 0, ['CHEM120', 'HIST140']]]),
  ('normal control 8',
   [[['s2', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [])]]
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: cross listed paper 1[['s1', 0, ['MATH101', 'MATH101H']]][]Failed
regression variant: cross listed paper 2[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101H']], ['s5', 1, ['BIO130', 'PHYS110']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']], ['s5', 1, ['BIO130', 'PHYS110']]]Failed
partial repair guard 3[['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]][['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]Passed
boundary control 4[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]Passed
normal control 5[][]Passed
normal control 6[['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]][['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]Passed
normal control 7[['s1', 3, ['HIST140', 'MATH101H']]][['s1', 3, ['HIST140', 'MATH101H']]]Passed
normal control 8[['s3', 2, ['CHEM120', 'PHYS110']]][['s3', 2, ['CHEM120', 'PHYS110']]]Passed

SHA-256 / 900c247243d304b78cac79ccaa3983e2f8fc5ca54b35f144bc40c5f3cfcf8e22

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(enrol, period, xlist):
    canon = {}
    for g in xlist:
        for e in g:
            canon[e] = g[0]
    slots = {}
    for st, ex in enrol:
        if ex not in period:
            continue
        slots.setdefault((st, period[ex]), set()).add(canon.get(ex, ex))
    out = []
    for (st, p), papers in sorted(slots.items()):
        if len(papers) > 1:
            out.append([st, p, sorted(papers)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cross listed paper 1',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('regression variant: cross listed paper 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],
     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'CHEM120'], ['s3', 'HIST140']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],
    ['s5', 1, ['BIO130', 'PHYS110']]]),
  ('partial repair guard 3',
   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],
     ['s2', 'BIO130'], ['s4', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],
    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),
  ('normal control 5',
   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 6',
   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],
     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],
     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],
   [['s1', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],
     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s3', 2, ['CHEM120', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],
     ['s2', 'MATH101'], ['s4', 'ECON150']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['HIST140', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],
     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],
     ['s1', 'CHEM120'], ['s4', 'PHYS110']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],
    ['s5', 0, ['ECON150', 'HIST140']]]),
  ('boundary control 4',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('normal control 5',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],
     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],
   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],
     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],
     ['s4', 'MATH101H'], ['s1', 'CHEM120']],
    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],
     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],
     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],
     ['s5', 'ECON150']],
    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},
    []],
   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),
  ('normal control 5',
   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],
     ['s2', 'CHEM120']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['BIO130', 'CHEM120']]]),
  ('normal control 6',
   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],
   [['s3', 2, ['CHEM120', 'MATH101H']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 8',
   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],
     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],
     ['s3', 'CHEM120'], ['s1', 'HIST140']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],
     ['s5', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],
    ['s5', 2, ['CHEM120', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],
     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],
     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],
    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],
     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],
     ['s2', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],
    ['s5', 3, ['CHEM120', 'HIST140']]]),
  ('normal control 6',
   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],
     ['s3', 'PHYS110'], ['s3', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 2, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],
    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],
   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],
     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 3, ['HIST140', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],
     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],
     ['s2', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),
  ('partial repair guard 3',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],
     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 0, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s5', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 0, ['CHEM120', 'HIST140']]]),
  ('normal control 8',
   [[['s2', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [])]]
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: cross listed paper 1[][]Passed
regression variant: cross listed paper 2[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101H']], ['s5', 1, ['BIO130', 'PHYS110']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']], ['s5', 1, ['BIO130', 'PHYS110']]]Failed
partial repair guard 3[['s2', 1, ['BIO130', 'PHYS110']], ['s3', 1, ['BIO130', 'PHYS110']], ['s4', 1, ['BIO130', 'PHYS110']]][['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]Failed
boundary control 4[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]Passed
normal control 5[][]Passed
normal control 6[['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101H']]][['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]Failed
normal control 7[['s1', 3, ['HIST140', 'MATH101H']]][['s1', 3, ['HIST140', 'MATH101H']]]Passed
normal control 8[['s3', 2, ['CHEM120', 'PHYS110']]][['s3', 2, ['CHEM120', 'PHYS110']]]Passed

SHA-256 / 2ee5aeaa72f555e178db444900d67476c57b8c8cb41e5a1126073137b92a98d3

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(enrol, period, xlist):
    canon = {}
    for g in xlist:
        for e in g:
            canon[e] = min(g)
    slots = {}
    for st, ex in enrol:
        if ex not in period:
            continue
        slots.setdefault((st, period[ex]), set()).add(canon.get(ex, ex))
    out = []
    for (st, p), papers in sorted(slots.items()):
        if len(papers) > 1:
            out.append([st, p, sorted(papers)])
    return out
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: cross listed paper 1',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('regression variant: cross listed paper 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],
     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'CHEM120'], ['s3', 'HIST140']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],
    ['s5', 1, ['BIO130', 'PHYS110']]]),
  ('partial repair guard 3',
   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],
     ['s2', 'BIO130'], ['s4', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],
    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],
   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),
  ('normal control 5',
   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 6',
   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],
     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],
     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],
   [['s1', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],
     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s3', 2, ['CHEM120', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],
     ['s2', 'MATH101'], ['s4', 'ECON150']],
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['HIST140', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],
     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],
     ['s1', 'CHEM120'], ['s4', 'PHYS110']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],
    ['s5', 0, ['ECON150', 'HIST140']]]),
  ('boundary control 4',
   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
  ('normal control 5',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],
     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],
     ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],
   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],
     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],
     ['s4', 'MATH101H'], ['s1', 'CHEM120']],
    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],
 [('regression: cross listed paper 1',
   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],
     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
    [['MATH101H', 'MATH101']]],
   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],
     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],
     ['s5', 'ECON150']],
    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),
  ('boundary control 4',
   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},
    []],
   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),
  ('normal control 5',
   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],
     ['s2', 'CHEM120']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},
    [['MATH101H', 'MATH101']]],
   [['s2', 3, ['BIO130', 'CHEM120']]]),
  ('normal control 6',
   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],
     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],
   [['s3', 2, ['CHEM120', 'MATH101H']]]),
  ('normal control 7',
   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],
    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 8',
   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],
     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],
    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],
     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],
     ['s3', 'CHEM120'], ['s1', 'HIST140']],
    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s5', 0, ['BIO130', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],
     ['s5', 'MATH101H']],
    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],
    ['s5', 2, ['CHEM120', 'MATH101']]]),
  ('partial repair guard 3',
   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],
     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],
     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],
    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],
    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],
     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],
     ['s2', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],
   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],
    ['s5', 3, ['CHEM120', 'HIST140']]]),
  ('normal control 6',
   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],
     ['s3', 'PHYS110'], ['s3', 'CHEM120']],
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s3', 2, ['CHEM120', 'MATH101']]]),
  ('normal control 7',
   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],
    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],
   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),
  ('normal control 8',
   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],
     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},
    [['MATH101H', 'MATH101']]],
   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],
 [('regression: cross listed paper 1',
   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 3, ['HIST140', 'MATH101']]]),
  ('regression variant: cross listed paper 2',
   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],
     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],
     ['s2', 'BIO130']],
    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),
  ('partial repair guard 3',
   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],
     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],
    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},
    [['MATH101H', 'MATH101']]],
   [['s3', 3, ['CHEM120', 'MATH101']]]),
  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
  ('normal control 5',
   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],
     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},
    [['MATH101H', 'MATH101']]],
   [['s2', 0, ['CHEM120', 'MATH101']]]),
  ('normal control 6',
   [[['s5', 'BIO130']],
    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   []),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [['s2', 0, ['CHEM120', 'HIST140']]]),
  ('normal control 8',
   [[['s2', 'ECON150']],
    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},
    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
   [])]]
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: cross listed paper 1[][]Passed
regression variant: cross listed paper 2[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']], ['s5', 1, ['BIO130', 'PHYS110']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']], ['s5', 1, ['BIO130', 'PHYS110']]]Passed
partial repair guard 3[['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]][['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]Passed
boundary control 4[['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]][['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]Passed
normal control 5[][]Passed
normal control 6[['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]][['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]Passed
normal control 7[['s1', 3, ['HIST140', 'MATH101H']]][['s1', 3, ['HIST140', 'MATH101H']]]Passed
normal control 8[['s3', 2, ['CHEM120', 'PHYS110']]][['s3', 2, ['CHEM120', 'PHYS110']]]Passed

SHA-256 / 2bde28e783354f03e15da0fbe9bc7ac8bc65b41f6cce31479f5172fb84ecde56

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

Case digest / 712e02be910e1e0af6b01566a4a6b2fbceb5d8798339210c3232503f1ee47902