FAILURE MAP
← Case archive

FA-94691 / Exam timetabling constraints / Open access

Conflict matrix stores a flag instead of a student count · case 01

Heavily shared exam pairs weigh the same as pairs with one shared student.

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

ROOT CAUSE

Each pair is set to 1 instead of incremented.

VERIFIED REPAIR

Increment the count per shared student.

Unsuccessful approach: Starting the count at one overstates every pair by one.

Case contract

enrol rows [student, exam] (may repeat). For every unordered pair of distinct exams (a < b) count the students enrolled in both. Return [a, b, count] rows sorted, omitting zero counts.

Why this case matters

The conflict matrix is the input to every exam timetabling algorithm; count errors silently change weights.

1 / The failure

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

N = 1
observations = []
def solve(enrol):
    by = {}
    for st, ex in enrol:
        by.setdefault(st, set()).add(ex)
    cnt = {}
    for st in by:
        exs = sorted(by[st])
        for i in range(len(exs)):
            for j in range(i + 1, len(exs)):
                k = (exs[i], exs[j])
                cnt[k] = 1
    return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair count increment 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]],
   [['A', 'B', 2]]),
  ('regression variant: pair count increment 2',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
     ['s3', 'ECON150']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 5',
   [[['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'MATH101H'],
     ['s5', 'BIO130'], ['s1', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 6',
   [[['s3', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s3', 'ECON150']]],
   [['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7', [[['s5', 'CHEM120'], ['s5', 'CHEM120']]], []),
  ('normal control 8',
   [[['s1', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'],
     ['s3', 'HIST140'], ['s1', 'MATH101'], ['s1', 'BIO130']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
    ['MATH101', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
     ['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'ECON150'], ['s3', 'HIST140'], ['s5', 'ECON150'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s3', 'MATH101H'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'MATH101'],
     ['s1', 'BIO130'], ['s5', 'BIO130'], ['s2', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
    ['HIST140', 'MATH101H', 2], ['MATH101', 'MATH101H', 1]]),
  ('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'PHYS110'], ['s3', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'HIST140'],
     ['s4', 'BIO130'], ['s2', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'ECON150'], ['s1', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
    ['ECON150', 'PHYS110', 2], ['HIST140', 'PHYS110', 1]]),
  ('normal control 7',
   [[['s3', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'],
     ['s1', 'HIST140'], ['s4', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'BIO130'], ['s4', 'BIO130'],
     ['s1', 'MATH101'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'PHYS110']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1],
    ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 1],
    ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s5', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s5', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s1', 'ECON150'], ['s1', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'ECON150'], ['s4', 'BIO130'],
     ['s2', 'MATH101'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s3', 'MATH101H']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'HIST140'],
     ['s4', 'CHEM120']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
     ['s1', 'ECON150'], ['s2', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['MATH101', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s1', 'BIO130']]], [['BIO130', 'CHEM120', 1]]),
  ('normal control 7', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8', [[['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'BIO130']]],
   [['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s5', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'BIO130'], ['s5', 'HIST140'],
     ['s1', 'HIST140'], ['s3', 'HIST140'], ['s1', 'BIO130']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 3], ['BIO130', 'MATH101', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'PHYS110'], ['s2', 'ECON150'], ['s5', 'CHEM120'],
     ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'MATH101H']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
    ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s3', 'HIST140'], ['s4', 'HIST140'], ['s4', 'ECON150'], ['s4', 'HIST140']]],
   [['ECON150', 'HIST140', 1]]),
  ('normal control 7', [[['s2', 'CHEM120'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8',
   [[['s5', 'BIO130'], ['s5', 'MATH101'], ['s5', 'ECON150'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'MATH101', 1], ['ECON150', 'MATH101', 1]])],
 [('regression: pair count increment 1',
   [[['s2', 'MATH101H'], ['s4', 'BIO130'], ['s4', 'MATH101H'], ['s4', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'MATH101'], ['s2', 'PHYS110'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 2], ['CHEM120', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'HIST140'], ['s2', 'ECON150'], ['s2', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'PHYS110'],
     ['s1', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'], ['s5', 'ECON150'], ['s1', 'CHEM120'],
     ['s2', 'BIO130'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s4', 'MATH101H']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'MATH101', 1],
    ['CHEM120', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'PHYS110'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s4', 'BIO130'],
     ['s2', 'PHYS110'], ['s5', 'BIO130'], ['s1', 'ECON150']]],
   [['BIO130', 'ECON150', 2], ['BIO130', 'HIST140', 2], ['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 2], ['MATH101', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s3', 'ECON150'], ['s1', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'CHEM120'],
     ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s1', 'MATH101H']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1],
    ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['MATH101H', 'PHYS110', 1]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: pair count increment 1[['A', 'B', 1]][['A', 'B', 2]]Failed
regression variant: pair count increment 2[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Failed
partial repair guard 3[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Passed
boundary control 4[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]][['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]Passed
normal control 5[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Passed
normal control 6[['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]][['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Passed
normal control 7[][]Passed
normal control 8[['BIO130', 'CHEM120', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]][['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Failed

SHA-256 / 6eed8380103fdef1b090b1329386440186399a66af0c346dbb86c9b2fee36b39

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(enrol):
    by = {}
    for st, ex in enrol:
        by.setdefault(st, set()).add(ex)
    cnt = {}
    for st in by:
        exs = sorted(by[st])
        for i in range(len(exs)):
            for j in range(i + 1, len(exs)):
                k = (exs[i], exs[j])
                cnt[k] = cnt.get(k, 1) + 1
    return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair count increment 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]],
   [['A', 'B', 2]]),
  ('regression variant: pair count increment 2',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
     ['s3', 'ECON150']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 5',
   [[['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'MATH101H'],
     ['s5', 'BIO130'], ['s1', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 6',
   [[['s3', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s3', 'ECON150']]],
   [['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7', [[['s5', 'CHEM120'], ['s5', 'CHEM120']]], []),
  ('normal control 8',
   [[['s1', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'],
     ['s3', 'HIST140'], ['s1', 'MATH101'], ['s1', 'BIO130']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
    ['MATH101', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
     ['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'ECON150'], ['s3', 'HIST140'], ['s5', 'ECON150'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s3', 'MATH101H'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'MATH101'],
     ['s1', 'BIO130'], ['s5', 'BIO130'], ['s2', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
    ['HIST140', 'MATH101H', 2], ['MATH101', 'MATH101H', 1]]),
  ('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'PHYS110'], ['s3', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'HIST140'],
     ['s4', 'BIO130'], ['s2', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'ECON150'], ['s1', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
    ['ECON150', 'PHYS110', 2], ['HIST140', 'PHYS110', 1]]),
  ('normal control 7',
   [[['s3', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'],
     ['s1', 'HIST140'], ['s4', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'BIO130'], ['s4', 'BIO130'],
     ['s1', 'MATH101'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'PHYS110']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1],
    ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 1],
    ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s5', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s5', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s1', 'ECON150'], ['s1', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'ECON150'], ['s4', 'BIO130'],
     ['s2', 'MATH101'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s3', 'MATH101H']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'HIST140'],
     ['s4', 'CHEM120']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
     ['s1', 'ECON150'], ['s2', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['MATH101', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s1', 'BIO130']]], [['BIO130', 'CHEM120', 1]]),
  ('normal control 7', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8', [[['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'BIO130']]],
   [['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s5', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'BIO130'], ['s5', 'HIST140'],
     ['s1', 'HIST140'], ['s3', 'HIST140'], ['s1', 'BIO130']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 3], ['BIO130', 'MATH101', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'PHYS110'], ['s2', 'ECON150'], ['s5', 'CHEM120'],
     ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'MATH101H']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
    ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s3', 'HIST140'], ['s4', 'HIST140'], ['s4', 'ECON150'], ['s4', 'HIST140']]],
   [['ECON150', 'HIST140', 1]]),
  ('normal control 7', [[['s2', 'CHEM120'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8',
   [[['s5', 'BIO130'], ['s5', 'MATH101'], ['s5', 'ECON150'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'MATH101', 1], ['ECON150', 'MATH101', 1]])],
 [('regression: pair count increment 1',
   [[['s2', 'MATH101H'], ['s4', 'BIO130'], ['s4', 'MATH101H'], ['s4', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'MATH101'], ['s2', 'PHYS110'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 2], ['CHEM120', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'HIST140'], ['s2', 'ECON150'], ['s2', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'PHYS110'],
     ['s1', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'], ['s5', 'ECON150'], ['s1', 'CHEM120'],
     ['s2', 'BIO130'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s4', 'MATH101H']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'MATH101', 1],
    ['CHEM120', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'PHYS110'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s4', 'BIO130'],
     ['s2', 'PHYS110'], ['s5', 'BIO130'], ['s1', 'ECON150']]],
   [['BIO130', 'ECON150', 2], ['BIO130', 'HIST140', 2], ['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 2], ['MATH101', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s3', 'ECON150'], ['s1', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'CHEM120'],
     ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s1', 'MATH101H']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1],
    ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['MATH101H', 'PHYS110', 1]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: pair count increment 1[['A', 'B', 3]][['A', 'B', 2]]Failed
regression variant: pair count increment 2[['BIO130', 'ECON150', 2], ['BIO130', 'MATH101H', 2], ['CHEM120', 'ECON150', 2], ['CHEM120', 'HIST140', 2], ['CHEM120', 'MATH101', 2], ['CHEM120', 'MATH101H', 2], ['CHEM120', 'PHYS110', 3], ['ECON150', 'HIST140', 3], ['ECON150', 'MATH101', 2], ['ECON150', 'MATH101H', 3], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 2], ['MATH101', 'MATH101H', 3], ['MATH101', 'PHYS110', 2], ['MATH101H', 'PHYS110', 2]][['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Failed
partial repair guard 3[['CHEM120', 'HIST140', 2], ['CHEM120', 'MATH101H', 2], ['CHEM120', 'PHYS110', 2], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 2], ['MATH101H', 'PHYS110', 2]][['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Failed
boundary control 4[['A', 'B', 2], ['A', 'C', 2], ['B', 'C', 2]][['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]Failed
normal control 5[['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 2], ['BIO130', 'MATH101H', 2], ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 2], ['MATH101H', 'PHYS110', 2]][['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Failed
normal control 6[['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 2], ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101', 2], ['HIST140', 'MATH101H', 2], ['MATH101', 'MATH101H', 2]][['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Failed
normal control 7[][]Passed
normal control 8[['BIO130', 'CHEM120', 3], ['BIO130', 'HIST140', 2], ['BIO130', 'MATH101', 2], ['BIO130', 'MATH101H', 2], ['CHEM120', 'HIST140', 2], ['CHEM120', 'MATH101', 2], ['CHEM120', 'MATH101H', 2], ['MATH101', 'MATH101H', 2]][['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Failed

SHA-256 / f21c1d9c2c4eaea5e7c7d20395aaa5b70940f7a55554a4384216bdb89472a195

3 / The verified repair

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

N = 1
observations = []
def solve(enrol):
    by = {}
    for st, ex in enrol:
        by.setdefault(st, set()).add(ex)
    cnt = {}
    for st in by:
        exs = sorted(by[st])
        for i in range(len(exs)):
            for j in range(i + 1, len(exs)):
                k = (exs[i], exs[j])
                cnt[k] = cnt.get(k, 0) + 1
    return [[a, b, n] for (a, b), n in sorted(cnt.items())]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: pair count increment 1', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]],
   [['A', 'B', 2]]),
  ('regression variant: pair count increment 2',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s2', 'BIO130'], ['s1', 'MATH101H'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'PHYS110'],
     ['s3', 'ECON150']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 5',
   [[['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s1', 'MATH101H'],
     ['s5', 'BIO130'], ['s1', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 6',
   [[['s3', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'MATH101'], ['s3', 'MATH101H'], ['s3', 'ECON150']]],
   [['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7', [[['s5', 'CHEM120'], ['s5', 'CHEM120']]], []),
  ('normal control 8',
   [[['s1', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'CHEM120'], ['s3', 'BIO130'], ['s1', 'MATH101H'],
     ['s3', 'HIST140'], ['s1', 'MATH101'], ['s1', 'BIO130']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1],
    ['MATH101', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s4', 'CHEM120'], ['s2', 'ECON150'], ['s5', 'HIST140'], ['s1', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'MATH101'], ['s5', 'MATH101'], ['s2', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'HIST140'],
     ['s2', 'PHYS110'], ['s2', 'BIO130'], ['s3', 'ECON150'], ['s1', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 1], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 2],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'ECON150'], ['s3', 'HIST140'], ['s5', 'ECON150'], ['s1', 'HIST140'], ['s5', 'HIST140'],
     ['s3', 'MATH101H'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'MATH101'],
     ['s1', 'BIO130'], ['s5', 'BIO130'], ['s2', 'CHEM120']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1],
    ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1],
    ['HIST140', 'MATH101H', 2], ['MATH101', 'MATH101H', 1]]),
  ('partial repair guard 3', [[['s5', 'MATH101'], ['s5', 'HIST140']]], [['HIST140', 'MATH101', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'PHYS110'], ['s3', 'PHYS110'], ['s4', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'HIST140'],
     ['s4', 'BIO130'], ['s2', 'ECON150'], ['s3', 'CHEM120'], ['s3', 'ECON150'], ['s1', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 1],
    ['ECON150', 'PHYS110', 2], ['HIST140', 'PHYS110', 1]]),
  ('normal control 7',
   [[['s3', 'ECON150'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'],
     ['s1', 'HIST140'], ['s4', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'BIO130'], ['s4', 'BIO130'],
     ['s1', 'MATH101'], ['s5', 'MATH101H'], ['s3', 'PHYS110'], ['s4', 'PHYS110']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1],
    ['BIO130', 'MATH101H', 1], ['BIO130', 'PHYS110', 1], ['ECON150', 'MATH101', 1],
    ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 2], ['HIST140', 'MATH101', 1],
    ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s5', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'MATH101H'], ['s5', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s1', 'ECON150'], ['s1', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'ECON150'], ['s4', 'BIO130'],
     ['s2', 'MATH101'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s3', 'MATH101H']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'ECON150'], ['s5', 'MATH101H'], ['s5', 'HIST140'],
     ['s4', 'CHEM120']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101H', 2], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s3', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'CHEM120'], ['s3', 'ECON150'], ['s2', 'MATH101H'],
     ['s1', 'ECON150'], ['s2', 'ECON150']]],
   [['CHEM120', 'ECON150', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['MATH101', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s2', 'CHEM120'], ['s2', 'BIO130'], ['s1', 'BIO130']]], [['BIO130', 'CHEM120', 1]]),
  ('normal control 7', [[['s2', 'BIO130'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8', [[['s3', 'HIST140'], ['s3', 'MATH101H'], ['s3', 'BIO130']]],
   [['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]])],
 [('regression: pair count increment 1',
   [[['s5', 'BIO130'], ['s3', 'ECON150'], ['s3', 'MATH101'], ['s3', 'BIO130'], ['s5', 'HIST140'],
     ['s1', 'HIST140'], ['s3', 'HIST140'], ['s1', 'BIO130']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 3], ['BIO130', 'MATH101', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['HIST140', 'MATH101', 1]]),
  ('regression variant: pair count increment 2',
   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'PHYS110'], ['s2', 'ECON150'], ['s5', 'CHEM120'],
     ['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s2', 'HIST140'], ['s3', 'MATH101H']]],
   [['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1],
    ['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1],
    ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 2], ['HIST140', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('partial repair guard 3',
   [[['s5', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'MATH101H'], ['s5', 'ECON150'], ['s3', 'HIST140'],
     ['s3', 'BIO130'], ['s3', 'ECON150'], ['s3', 'ECON150']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'HIST140', 2],
    ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6', [[['s3', 'HIST140'], ['s4', 'HIST140'], ['s4', 'ECON150'], ['s4', 'HIST140']]],
   [['ECON150', 'HIST140', 1]]),
  ('normal control 7', [[['s2', 'CHEM120'], ['s2', 'HIST140'], ['s2', 'ECON150'], ['s4', 'PHYS110']]],
   [['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['ECON150', 'HIST140', 1]]),
  ('normal control 8',
   [[['s5', 'BIO130'], ['s5', 'MATH101'], ['s5', 'ECON150'], ['s5', 'CHEM120'], ['s2', 'MATH101']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101', 1], ['CHEM120', 'ECON150', 1],
    ['CHEM120', 'MATH101', 1], ['ECON150', 'MATH101', 1]])],
 [('regression: pair count increment 1',
   [[['s2', 'MATH101H'], ['s4', 'BIO130'], ['s4', 'MATH101H'], ['s4', 'CHEM120'], ['s2', 'BIO130'],
     ['s4', 'MATH101'], ['s2', 'PHYS110'], ['s2', 'CHEM120']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 2], ['BIO130', 'PHYS110', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 2], ['CHEM120', 'PHYS110', 1],
    ['MATH101', 'MATH101H', 1], ['MATH101H', 'PHYS110', 1]]),
  ('regression variant: pair count increment 2',
   [[['s3', 'HIST140'], ['s2', 'ECON150'], ['s2', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'PHYS110'],
     ['s1', 'MATH101H'], ['s4', 'HIST140'], ['s3', 'MATH101'], ['s5', 'ECON150'], ['s1', 'CHEM120'],
     ['s2', 'BIO130'], ['s1', 'HIST140']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 2],
    ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['ECON150', 'MATH101H', 1],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1]]),
  ('partial repair guard 3',
   [[['s4', 'PHYS110'], ['s1', 'ECON150'], ['s1', 'MATH101H'], ['s5', 'PHYS110'], ['s1', 'MATH101'],
     ['s5', 'CHEM120'], ['s5', 'ECON150'], ['s4', 'CHEM120'], ['s2', 'BIO130'], ['s4', 'MATH101'],
     ['s4', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s1', 'HIST140'], ['s2', 'ECON150'],
     ['s5', 'HIST140']]],
   [['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2],
    ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2],
    ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1],
    ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1],
    ['MATH101H', 'PHYS110', 1]]),
  ('boundary control 4', [[['s1', 'A'], ['s1', 'B'], ['s2', 'A'], ['s2', 'B']]], [['A', 'B', 2]]),
  ('boundary control 5', [[['s1', 'B'], ['s1', 'A'], ['s1', 'C']]],
   [['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]),
  ('normal control 6',
   [[['s4', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'], ['s4', 'CHEM120'],
     ['s5', 'CHEM120'], ['s4', 'MATH101H']]],
   [['BIO130', 'CHEM120', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'MATH101', 1],
    ['CHEM120', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['MATH101', 'MATH101H', 1]]),
  ('normal control 7',
   [[['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'HIST140'], ['s3', 'MATH101H'], ['s1', 'PHYS110'],
     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s4', 'ECON150'], ['s5', 'HIST140'], ['s4', 'BIO130'],
     ['s2', 'PHYS110'], ['s5', 'BIO130'], ['s1', 'ECON150']]],
   [['BIO130', 'ECON150', 2], ['BIO130', 'HIST140', 2], ['BIO130', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['ECON150', 'MATH101', 1], ['ECON150', 'PHYS110', 2], ['MATH101', 'PHYS110', 1]]),
  ('normal control 8',
   [[['s3', 'ECON150'], ['s1', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'CHEM120'],
     ['s3', 'BIO130'], ['s1', 'PHYS110'], ['s1', 'MATH101H']]],
   [['BIO130', 'CHEM120', 2], ['BIO130', 'ECON150', 1], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101H', 1],
    ['BIO130', 'PHYS110', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1],
    ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['ECON150', 'HIST140', 1],
    ['MATH101H', 'PHYS110', 1]])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: pair count increment 1[['A', 'B', 2]][['A', 'B', 2]]Passed
regression variant: pair count increment 2[['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'ECON150', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 2], ['ECON150', 'HIST140', 2], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 2], ['ECON150', 'PHYS110', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101', 'MATH101H', 2], ['MATH101', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Passed
partial repair guard 3[['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101H', 1], ['CHEM120', 'PHYS110', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Passed
boundary control 4[['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]][['A', 'B', 1], ['A', 'C', 1], ['B', 'C', 1]]Passed
normal control 5[['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]][['BIO130', 'CHEM120', 1], ['BIO130', 'ECON150', 1], ['BIO130', 'MATH101H', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101H', 1], ['HIST140', 'PHYS110', 1], ['MATH101H', 'PHYS110', 1]]Passed
normal control 6[['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]][['ECON150', 'HIST140', 1], ['ECON150', 'MATH101', 1], ['ECON150', 'MATH101H', 1], ['HIST140', 'MATH101', 1], ['HIST140', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Passed
normal control 7[][]Passed
normal control 8[['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]][['BIO130', 'CHEM120', 2], ['BIO130', 'HIST140', 1], ['BIO130', 'MATH101', 1], ['BIO130', 'MATH101H', 1], ['CHEM120', 'HIST140', 1], ['CHEM120', 'MATH101', 1], ['CHEM120', 'MATH101H', 1], ['MATH101', 'MATH101H', 1]]Passed

SHA-256 / 621bcabf1e1c5451f5d20dccca32960fa32a31fdf3da40961f39191eccff3c6f

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

Case digest / ea4c29417431b4957da92da82fd2ace91cee0c06c5ff098557398e79a35d669a