FA-94341 / Exam timetabling constraints / Open access
Repeated enrolment row reported as an exam clash · case 01
A student enrolled twice in the same exam appears to have two exams in one period.
ROOT CAUSE
Papers per student-period are collected in a list, so a duplicated enrolment counts twice.
VERIFIED REPAIR
Collect distinct canonical papers per student and period.
Unsuccessful approach: Testing distinctness but still returning the list reports duplicated paper names.
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]), []).append(canon.get(ex, ex))
out = []
for (st, p), papers in sorted(slots.items()):
if len(papers) > 1 and papers:
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: duplicate enrolment 1', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('regression variant: duplicate enrolment 2',
[[['s2', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s3', 'BIO130'],
['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'BIO130'], ['s4', 'HIST140'],
['s4', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'PHYS110'], ['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3}, []],
[['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']],
['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']],
['s5', 2, ['MATH101', 'PHYS110']]]),
('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', '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',
[[['s3', 'CHEM120'], ['s2', 'MATH101'], ['s2', 'PHYS110']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 1, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'BIO130']],
{'MATH101': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['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 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: duplicate enrolment 1',
[[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
('regression variant: duplicate enrolment 2',
[[['s1', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s1', 'PHYS110'],
['s3', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'PHYS110']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 1, 'HIST140': 0, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s3', 1, ['ECON150', 'PHYS110']], ['s5', 1, ['BIO130', 'ECON150']]]),
('partial repair guard 3',
[[['s5', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'BIO130'], ['s2', 'BIO130'], ['s2', 'PHYS110'],
['s2', 'ECON150']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, []],
[['s2', 2, ['BIO130', 'PHYS110']]]),
('normal control 4',
[[['s4', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
['s1', 'MATH101H'], ['s5', 'CHEM120'], ['s5', 'PHYS110'], ['s1', 'BIO130'], ['s3', 'BIO130'],
['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'], ['s5', 'MATH101'], ['s3', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s1', 1, ['CHEM120', 'ECON150']], ['s5', 1, ['CHEM120', 'PHYS110']], ['s5', 2, ['BIO130', 'MATH101']]]),
('normal control 5',
[[['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']]]),
('normal control 6',
[[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s5', 'MATH101'],
['s3', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'MATH101H']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s3', 3, ['BIO130', 'HIST140']], ['s5', 0, ['CHEM120', 'MATH101']]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'HIST140'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s4', 'MATH101H']],
{'MATH101': 1, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s1', 'MATH101'],
['s2', 'PHYS110'], ['s5', 'ECON150'], ['s5', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101H'],
['s3', 'BIO130'], ['s3', 'MATH101'], ['s4', 'ECON150']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']], ['s5', 2, ['HIST140', 'MATH101']]])],
[('regression: duplicate enrolment 1',
[[['s2', 'ECON150'], ['s2', 'ECON150'], ['s3', 'ECON150'], ['s2', 'BIO130'], ['s3', 'BIO130'],
['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 0}, []],
[['s3', 0, ['ECON150', 'MATH101H']]]),
('regression variant: duplicate enrolment 2',
[[['s3', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0}, []],
[]),
('partial repair guard 3',
[[['s1', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101']],
{'MATH101': 1, 'MATH101H': 1, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}, []],
[['s1', 2, ['CHEM120', 'ECON150']]]),
('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',
[[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s5', 'MATH101'],
['s3', 'ECON150'], ['s3', 'MATH101'], ['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'PHYS110'],
['s5', 'CHEM120']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s3', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'BIO130': 3, 'ECON150': 0}, []],
[]),
('normal control 7',
[[['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s5', 1, ['HIST140', 'MATH101']]]),
('normal control 8',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s1', 'ECON150'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 2, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[['s1', 2, ['BIO130', 'ECON150']], ['s4', 2, ['BIO130', 'ECON150', 'MATH101']]])],
[('regression: duplicate enrolment 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: duplicate enrolment 2',
[[['s1', 'MATH101H'], ['s3', 'ECON150'], ['s1', 'ECON150'], ['s2', 'HIST140'], ['s3', 'PHYS110'],
['s1', 'HIST140'], ['s5', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'MATH101'], ['s4', 'ECON150'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'MATH101H'],
['s2', 'ECON150'], ['s2', 'BIO130']],
{'MATH101': 1, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('partial repair guard 3',
[[['s4', 'HIST140'], ['s4', 'PHYS110'], ['s4', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 1, 'ECON150': 0}, []],
[['s4', 1, ['HIST140', 'PHYS110']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s2', 'BIO130'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'MATH101H'],
['s2', 'CHEM120'], ['s4', 'HIST140']],
{'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s1', 'CHEM120']], {'MATH101': 1, 'MATH101H': 2, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 2, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s4', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'HIST140'], ['s5', 'MATH101'],
['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'BIO130': 3, 'HIST140': 1}, []],
[['s1', 0, ['MATH101', 'PHYS110']]])],
[('regression: duplicate enrolment 1',
[[['s4', 'HIST140'], ['s1', 'MATH101'], ['s2', 'ECON150'], ['s4', 'MATH101'], ['s4', 'ECON150'],
['s2', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'MATH101H'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s4', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101H': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 2}, []],
[['s2', 2, ['BIO130', 'ECON150']]]),
('regression variant: duplicate enrolment 2',
[[['s5', 'MATH101H'], ['s2', 'ECON150'], ['s4', 'BIO130'], ['s2', 'PHYS110'], ['s2', 'MATH101'],
['s5', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s2', 'BIO130'],
['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']]]),
('partial repair guard 3',
[[['s5', 'ECON150'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101'], ['s4', 'CHEM120'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s2', 'BIO130']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['BIO130', 'MATH101']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s5', 'HIST140'], ['s5', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'MATH101']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 2, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s2', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s2', 'PHYS110'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s3', 'PHYS110'], ['s4', 'MATH101'],
['s4', 'CHEM120'], ['s5', 'BIO130']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 1, 'ECON150': 3}, []],
[['s4', 1, ['CHEM120', 'HIST140']]]),
('normal control 8',
[[['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'HIST140']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3}, []],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: duplicate enrolment 1 | [['s1', 0, ['MATH101', 'MATH101']]] | [] | Failed |
| regression variant: duplicate enrolment 2 | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | Failed |
| partial repair guard 3 | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | 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 | [['s4', 3, ['BIO130', 'BIO130']]] | [] | Failed |
| normal control 7 | [['s2', 0, ['CHEM120', 'MATH101']]] | [['s2', 0, ['CHEM120', 'MATH101']]] | Passed |
| normal control 8 | [['s3', 2, ['CHEM120', 'PHYS110']]] | [['s3', 2, ['CHEM120', 'PHYS110']]] | Passed |
SHA-256 / b365bfed72db4bad9c1f8af97922e0b5af89436444c3a796a52412068bb323a2
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] = min(g)
slots = {}
for st, ex in enrol:
if ex not in period:
continue
slots.setdefault((st, period[ex]), []).append(canon.get(ex, ex))
out = []
for (st, p), papers in sorted(slots.items()):
if len(set(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: duplicate enrolment 1', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('regression variant: duplicate enrolment 2',
[[['s2', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s3', 'BIO130'],
['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'BIO130'], ['s4', 'HIST140'],
['s4', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'PHYS110'], ['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3}, []],
[['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']],
['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']],
['s5', 2, ['MATH101', 'PHYS110']]]),
('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', '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',
[[['s3', 'CHEM120'], ['s2', 'MATH101'], ['s2', 'PHYS110']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 1, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'BIO130']],
{'MATH101': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['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 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: duplicate enrolment 1',
[[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
('regression variant: duplicate enrolment 2',
[[['s1', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s1', 'PHYS110'],
['s3', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'PHYS110']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 1, 'HIST140': 0, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s3', 1, ['ECON150', 'PHYS110']], ['s5', 1, ['BIO130', 'ECON150']]]),
('partial repair guard 3',
[[['s5', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'BIO130'], ['s2', 'BIO130'], ['s2', 'PHYS110'],
['s2', 'ECON150']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, []],
[['s2', 2, ['BIO130', 'PHYS110']]]),
('normal control 4',
[[['s4', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
['s1', 'MATH101H'], ['s5', 'CHEM120'], ['s5', 'PHYS110'], ['s1', 'BIO130'], ['s3', 'BIO130'],
['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'], ['s5', 'MATH101'], ['s3', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s1', 1, ['CHEM120', 'ECON150']], ['s5', 1, ['CHEM120', 'PHYS110']], ['s5', 2, ['BIO130', 'MATH101']]]),
('normal control 5',
[[['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']]]),
('normal control 6',
[[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s5', 'MATH101'],
['s3', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'MATH101H']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s3', 3, ['BIO130', 'HIST140']], ['s5', 0, ['CHEM120', 'MATH101']]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'HIST140'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s4', 'MATH101H']],
{'MATH101': 1, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s1', 'MATH101'],
['s2', 'PHYS110'], ['s5', 'ECON150'], ['s5', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101H'],
['s3', 'BIO130'], ['s3', 'MATH101'], ['s4', 'ECON150']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']], ['s5', 2, ['HIST140', 'MATH101']]])],
[('regression: duplicate enrolment 1',
[[['s2', 'ECON150'], ['s2', 'ECON150'], ['s3', 'ECON150'], ['s2', 'BIO130'], ['s3', 'BIO130'],
['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 0}, []],
[['s3', 0, ['ECON150', 'MATH101H']]]),
('regression variant: duplicate enrolment 2',
[[['s3', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0}, []],
[]),
('partial repair guard 3',
[[['s1', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101']],
{'MATH101': 1, 'MATH101H': 1, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}, []],
[['s1', 2, ['CHEM120', 'ECON150']]]),
('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',
[[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s5', 'MATH101'],
['s3', 'ECON150'], ['s3', 'MATH101'], ['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'PHYS110'],
['s5', 'CHEM120']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s3', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'BIO130': 3, 'ECON150': 0}, []],
[]),
('normal control 7',
[[['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s5', 1, ['HIST140', 'MATH101']]]),
('normal control 8',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s1', 'ECON150'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 2, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[['s1', 2, ['BIO130', 'ECON150']], ['s4', 2, ['BIO130', 'ECON150', 'MATH101']]])],
[('regression: duplicate enrolment 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: duplicate enrolment 2',
[[['s1', 'MATH101H'], ['s3', 'ECON150'], ['s1', 'ECON150'], ['s2', 'HIST140'], ['s3', 'PHYS110'],
['s1', 'HIST140'], ['s5', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'MATH101'], ['s4', 'ECON150'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'MATH101H'],
['s2', 'ECON150'], ['s2', 'BIO130']],
{'MATH101': 1, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('partial repair guard 3',
[[['s4', 'HIST140'], ['s4', 'PHYS110'], ['s4', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 1, 'ECON150': 0}, []],
[['s4', 1, ['HIST140', 'PHYS110']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s2', 'BIO130'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'MATH101H'],
['s2', 'CHEM120'], ['s4', 'HIST140']],
{'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s1', 'CHEM120']], {'MATH101': 1, 'MATH101H': 2, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 2, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s4', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'HIST140'], ['s5', 'MATH101'],
['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'BIO130': 3, 'HIST140': 1}, []],
[['s1', 0, ['MATH101', 'PHYS110']]])],
[('regression: duplicate enrolment 1',
[[['s4', 'HIST140'], ['s1', 'MATH101'], ['s2', 'ECON150'], ['s4', 'MATH101'], ['s4', 'ECON150'],
['s2', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'MATH101H'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s4', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101H': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 2}, []],
[['s2', 2, ['BIO130', 'ECON150']]]),
('regression variant: duplicate enrolment 2',
[[['s5', 'MATH101H'], ['s2', 'ECON150'], ['s4', 'BIO130'], ['s2', 'PHYS110'], ['s2', 'MATH101'],
['s5', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s2', 'BIO130'],
['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']]]),
('partial repair guard 3',
[[['s5', 'ECON150'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101'], ['s4', 'CHEM120'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s2', 'BIO130']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['BIO130', 'MATH101']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s5', 'HIST140'], ['s5', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'MATH101']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 2, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s2', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s2', 'PHYS110'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s3', 'PHYS110'], ['s4', 'MATH101'],
['s4', 'CHEM120'], ['s5', 'BIO130']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 1, 'ECON150': 3}, []],
[['s4', 1, ['CHEM120', 'HIST140']]]),
('normal control 8',
[[['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'HIST140']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3}, []],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: duplicate enrolment 1 | [] | [] | Passed |
| regression variant: duplicate enrolment 2 | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | Failed |
| partial repair guard 3 | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | 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 | [] | [] | Passed |
| normal control 7 | [['s2', 0, ['CHEM120', 'MATH101']]] | [['s2', 0, ['CHEM120', 'MATH101']]] | Passed |
| normal control 8 | [['s3', 2, ['CHEM120', 'PHYS110']]] | [['s3', 2, ['CHEM120', 'PHYS110']]] | Passed |
SHA-256 / 2d7f40d8f3b5ba2a0f66e42f769cf3c310f4da7dd1adbd38327a526fa4c165e0
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: duplicate enrolment 1', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('regression variant: duplicate enrolment 2',
[[['s2', 'CHEM120'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s3', 'BIO130'],
['s1', 'PHYS110'], ['s4', 'PHYS110'], ['s5', 'HIST140'], ['s4', 'BIO130'], ['s4', 'HIST140'],
['s4', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101H'],
['s3', 'PHYS110'], ['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3}, []],
[['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']],
['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']],
['s5', 2, ['MATH101', 'PHYS110']]]),
('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', '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',
[[['s3', 'CHEM120'], ['s2', 'MATH101'], ['s2', 'PHYS110']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 1, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'BIO130'], ['s4', 'BIO130']],
{'MATH101': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['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 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: duplicate enrolment 1',
[[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),
('regression variant: duplicate enrolment 2',
[[['s1', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s1', 'PHYS110'],
['s3', 'ECON150'], ['s3', 'PHYS110'], ['s2', 'PHYS110']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 1, 'HIST140': 0, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s3', 1, ['ECON150', 'PHYS110']], ['s5', 1, ['BIO130', 'ECON150']]]),
('partial repair guard 3',
[[['s5', 'PHYS110'], ['s4', 'HIST140'], ['s2', 'BIO130'], ['s2', 'BIO130'], ['s2', 'PHYS110'],
['s2', 'ECON150']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, []],
[['s2', 2, ['BIO130', 'PHYS110']]]),
('normal control 4',
[[['s4', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'MATH101H'], ['s5', 'BIO130'],
['s1', 'MATH101H'], ['s5', 'CHEM120'], ['s5', 'PHYS110'], ['s1', 'BIO130'], ['s3', 'BIO130'],
['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'], ['s5', 'MATH101'], ['s3', 'HIST140']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s1', 1, ['CHEM120', 'ECON150']], ['s5', 1, ['CHEM120', 'PHYS110']], ['s5', 2, ['BIO130', 'MATH101']]]),
('normal control 5',
[[['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']]]),
('normal control 6',
[[['s5', 'PHYS110'], ['s5', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s5', 'MATH101'],
['s3', 'PHYS110'], ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'MATH101H']],
{'MATH101': 0, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s3', 3, ['BIO130', 'HIST140']], ['s5', 0, ['CHEM120', 'MATH101']]]),
('normal control 7',
[[['s1', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s4', 'CHEM120'],
['s3', 'MATH101H'], ['s5', 'HIST140'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s4', 'MATH101H']],
{'MATH101': 1, 'MATH101H': 2, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s2', 'MATH101H'], ['s5', 'MATH101H'], ['s3', 'ECON150'], ['s5', 'BIO130'], ['s1', 'MATH101'],
['s2', 'PHYS110'], ['s5', 'ECON150'], ['s5', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101H'],
['s3', 'BIO130'], ['s3', 'MATH101'], ['s4', 'ECON150']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']], ['s5', 2, ['HIST140', 'MATH101']]])],
[('regression: duplicate enrolment 1',
[[['s2', 'ECON150'], ['s2', 'ECON150'], ['s3', 'ECON150'], ['s2', 'BIO130'], ['s3', 'BIO130'],
['s3', 'MATH101H'], ['s4', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 0}, []],
[['s3', 0, ['ECON150', 'MATH101H']]]),
('regression variant: duplicate enrolment 2',
[[['s3', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'BIO130']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 2, 'ECON150': 0}, []],
[]),
('partial repair guard 3',
[[['s1', 'CHEM120'], ['s5', 'HIST140'], ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101']],
{'MATH101': 1, 'MATH101H': 1, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2}, []],
[['s1', 2, ['CHEM120', 'ECON150']]]),
('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',
[[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s5', 'MATH101'],
['s3', 'ECON150'], ['s3', 'MATH101'], ['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'PHYS110'],
['s5', 'CHEM120']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s3', 'HIST140'], ['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'BIO130': 3, 'ECON150': 0}, []],
[]),
('normal control 7',
[[['s5', 'PHYS110'], ['s5', 'MATH101'], ['s3', 'MATH101'], ['s5', 'HIST140'], ['s5', 'BIO130'],
['s5', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s5', 1, ['HIST140', 'MATH101']]]),
('normal control 8',
[[['s3', 'MATH101H'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'CHEM120'], ['s4', 'BIO130'],
['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s1', 'ECON150'], ['s4', 'ECON150']],
{'MATH101': 3, 'MATH101H': 2, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[['s1', 2, ['BIO130', 'ECON150']], ['s4', 2, ['BIO130', 'ECON150', 'MATH101']]])],
[('regression: duplicate enrolment 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: duplicate enrolment 2',
[[['s1', 'MATH101H'], ['s3', 'ECON150'], ['s1', 'ECON150'], ['s2', 'HIST140'], ['s3', 'PHYS110'],
['s1', 'HIST140'], ['s5', 'MATH101'], ['s3', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'HIST140'],
['s2', 'MATH101'], ['s4', 'ECON150'], ['s5', 'PHYS110'], ['s5', 'BIO130'], ['s4', 'MATH101H'],
['s2', 'ECON150'], ['s2', 'BIO130']],
{'MATH101': 1, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 3, 'ECON150': 2},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('partial repair guard 3',
[[['s4', 'HIST140'], ['s4', 'PHYS110'], ['s4', 'PHYS110']],
{'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 1, 'ECON150': 0}, []],
[['s4', 1, ['HIST140', 'PHYS110']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s2', 'BIO130'], ['s2', 'ECON150']],
{'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 2, 'ECON150': 2},
[['MATH101H', 'MATH101']]],
[]),
('normal control 6',
[[['s4', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'ECON150'], ['s2', 'MATH101'], ['s4', 'MATH101H'],
['s2', 'CHEM120'], ['s4', 'HIST140']],
{'MATH101H': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s1', 'CHEM120']], {'MATH101': 1, 'MATH101H': 2, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 2, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[]),
('normal control 8',
[[['s4', 'MATH101H'], ['s1', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'HIST140'], ['s5', 'MATH101'],
['s5', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101']],
{'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'BIO130': 3, 'HIST140': 1}, []],
[['s1', 0, ['MATH101', 'PHYS110']]])],
[('regression: duplicate enrolment 1',
[[['s4', 'HIST140'], ['s1', 'MATH101'], ['s2', 'ECON150'], ['s4', 'MATH101'], ['s4', 'ECON150'],
['s2', 'MATH101'], ['s1', 'PHYS110'], ['s1', 'BIO130'], ['s1', 'MATH101H'], ['s2', 'BIO130'],
['s3', 'HIST140'], ['s4', 'ECON150'], ['s3', 'PHYS110']],
{'MATH101H': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 2}, []],
[['s2', 2, ['BIO130', 'ECON150']]]),
('regression variant: duplicate enrolment 2',
[[['s5', 'MATH101H'], ['s2', 'ECON150'], ['s4', 'BIO130'], ['s2', 'PHYS110'], ['s2', 'MATH101'],
['s5', 'HIST140'], ['s5', 'CHEM120'], ['s4', 'MATH101H'], ['s5', 'BIO130'], ['s2', 'BIO130'],
['s4', 'MATH101']],
{'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},
[['MATH101H', 'MATH101']]],
[['s2', 2, ['MATH101', 'PHYS110']]]),
('partial repair guard 3',
[[['s5', 'ECON150'], ['s1', 'MATH101'], ['s1', 'HIST140'], ['s1', 'CHEM120'], ['s1', 'MATH101'],
['s2', 'MATH101'], ['s4', 'CHEM120'], ['s2', 'HIST140'], ['s5', 'MATH101'], ['s1', 'ECON150'],
['s5', 'MATH101H'], ['s2', 'MATH101H'], ['s4', 'PHYS110'], ['s2', 'BIO130']],
{'MATH101': 2, 'MATH101H': 0, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['BIO130', 'MATH101']]]),
('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),
('normal control 5',
[[['s5', 'HIST140'], ['s5', 'BIO130'], ['s2', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101H'],
['s2', 'MATH101'], ['s5', 'MATH101']],
{'MATH101': 0, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 2, 'ECON150': 1},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 6',
[[['s2', 'MATH101H'], ['s2', 'HIST140'], ['s4', 'BIO130'], ['s2', 'MATH101H'], ['s2', 'MATH101']],
{'MATH101': 2, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 0},
[['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],
[]),
('normal control 7',
[[['s2', 'PHYS110'], ['s2', 'HIST140'], ['s4', 'HIST140'], ['s3', 'PHYS110'], ['s4', 'MATH101'],
['s4', 'CHEM120'], ['s5', 'BIO130']],
{'MATH101': 3, 'MATH101H': 1, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 2, 'HIST140': 1, 'ECON150': 3}, []],
[['s4', 1, ['CHEM120', 'HIST140']]]),
('normal control 8',
[[['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'MATH101H'], ['s3', 'HIST140']],
{'MATH101': 0, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3}, []],
[])]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: duplicate enrolment 1 | [] | [] | Passed |
| regression variant: duplicate enrolment 2 | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | [['s1', 2, ['BIO130', 'PHYS110']], ['s2', 3, ['CHEM120', 'MATH101H']], ['s3', 2, ['BIO130', 'PHYS110']], ['s3', 3, ['HIST140', 'MATH101H']], ['s4', 2, ['BIO130', 'MATH101', 'PHYS110']], ['s5', 2, ['MATH101', 'PHYS110']]] | Passed |
| partial repair guard 3 | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']], ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]] | 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 | [] | [] | Passed |
| normal control 7 | [['s2', 0, ['CHEM120', 'MATH101']]] | [['s2', 0, ['CHEM120', 'MATH101']]] | Passed |
| normal control 8 | [['s3', 2, ['CHEM120', 'PHYS110']]] | [['s3', 2, ['CHEM120', 'PHYS110']]] | Passed |
SHA-256 / 3740b33e00be45da01163ec9f0900a1aab09fb9478fb971bd99421fb6303174b
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.412677+00:00.
Case digest / 9d3eb1a1907e037e0f4dd5461e4ba97b2de583fdec9704bc83b240bfee2b9f45