{"abstract":"Students in a cross-listed paper are shown clashing with themselves.","category":"Exam timetabling constraints","checks":8,"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.","evaluation_group":"w2-exam-timetabling-constraints-student-clash-report","failed_approach":"Using the first listed id makes canonical names depend on list order.","family":"w2-exam-timetabling-constraints-student-clash-report-cross-listed-paper","id":"FA-94346","implementations":{"attempt":{"sha256":"2ee5aeaa72f555e178db444900d67476c57b8c8cb41e5a1126073137b92a98d3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(enrol, period, xlist):\n    canon = {}\n    for g in xlist:\n        for e in g:\n            canon[e] = g[0]\n    slots = {}\n    for st, ex in enrol:\n        if ex not in period:\n            continue\n        slots.setdefault((st, period[ex]), set()).add(canon.get(ex, ex))\n    out = []\n    for (st, p), papers in sorted(slots.items()):\n        if len(papers) > 1:\n            out.append([st, p, sorted(papers)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: cross listed paper 1',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120'], ['s3', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],\n    ['s5', 1, ['BIO130', 'PHYS110']]]),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'BIO130'], ['s4', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],\n    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),\n  ('normal control 5',\n   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 6',\n   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],\n     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],\n   [['s1', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],\n     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 2, ['CHEM120', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['HIST140', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],\n     ['s1', 'CHEM120'], ['s4', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],\n    ['s5', 0, ['ECON150', 'HIST140']]]),\n  ('boundary control 4',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('normal control 5',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],\n     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],\n     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],\n     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],\n     ['s4', 'MATH101H'], ['s1', 'CHEM120']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],\n     ['s5', 'ECON150']],\n    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},\n    []],\n   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),\n  ('normal control 5',\n   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['BIO130', 'CHEM120']]]),\n  ('normal control 6',\n   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],\n     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],\n   [['s3', 2, ['CHEM120', 'MATH101H']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],\n     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],\n     ['s3', 'CHEM120'], ['s1', 'HIST140']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],\n     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],\n    ['s5', 2, ['CHEM120', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],\n     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],\n    ['s5', 3, ['CHEM120', 'HIST140']]]),\n  ('normal control 6',\n   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],\n     ['s3', 'PHYS110'], ['s3', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 2, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],\n     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 3, ['HIST140', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],\n     ['s2', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 0, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s5', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 7',\n   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 0, ['CHEM120', 'HIST140']]]),\n  ('normal control 8',\n   [[['s2', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"900c247243d304b78cac79ccaa3983e2f8fc5ca54b35f144bc40c5f3cfcf8e22","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(enrol, period, xlist):\n    canon = {}\n    for g in xlist:\n        for e in g:\n            canon[e] = min(g)\n    slots = {}\n    for st, ex in enrol:\n        if ex not in period:\n            continue\n        slots.setdefault((st, period[ex]), set()).add(ex)\n    out = []\n    for (st, p), papers in sorted(slots.items()):\n        if len(papers) > 1:\n            out.append([st, p, sorted(papers)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: cross listed paper 1',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120'], ['s3', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],\n    ['s5', 1, ['BIO130', 'PHYS110']]]),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'BIO130'], ['s4', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],\n    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),\n  ('normal control 5',\n   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 6',\n   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],\n     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],\n   [['s1', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],\n     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 2, ['CHEM120', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['HIST140', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],\n     ['s1', 'CHEM120'], ['s4', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],\n    ['s5', 0, ['ECON150', 'HIST140']]]),\n  ('boundary control 4',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('normal control 5',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],\n     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],\n     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],\n     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],\n     ['s4', 'MATH101H'], ['s1', 'CHEM120']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],\n     ['s5', 'ECON150']],\n    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},\n    []],\n   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),\n  ('normal control 5',\n   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['BIO130', 'CHEM120']]]),\n  ('normal control 6',\n   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],\n     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],\n   [['s3', 2, ['CHEM120', 'MATH101H']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],\n     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],\n     ['s3', 'CHEM120'], ['s1', 'HIST140']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],\n     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],\n    ['s5', 2, ['CHEM120', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],\n     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],\n    ['s5', 3, ['CHEM120', 'HIST140']]]),\n  ('normal control 6',\n   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],\n     ['s3', 'PHYS110'], ['s3', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 2, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],\n     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 3, ['HIST140', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],\n     ['s2', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 0, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s5', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 7',\n   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 0, ['CHEM120', 'HIST140']]]),\n  ('normal control 8',\n   [[['s2', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"2bde28e783354f03e15da0fbe9bc7ac8bc65b41f6cce31479f5172fb84ecde56","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(enrol, period, xlist):\n    canon = {}\n    for g in xlist:\n        for e in g:\n            canon[e] = min(g)\n    slots = {}\n    for st, ex in enrol:\n        if ex not in period:\n            continue\n        slots.setdefault((st, period[ex]), set()).add(canon.get(ex, ex))\n    out = []\n    for (st, p), papers in sorted(slots.items()):\n        if len(papers) > 1:\n            out.append([st, p, sorted(papers)])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[('regression: cross listed paper 1',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'HIST140'], ['s2', 'MATH101'], ['s5', 'BIO130'], ['s2', 'PHYS110'], ['s1', 'CHEM120'],\n     ['s1', 'PHYS110'], ['s3', 'ECON150'], ['s2', 'CHEM120'], ['s3', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'CHEM120'], ['s3', 'HIST140']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 1, 'BIO130': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 1, ['CHEM120', 'PHYS110']], ['s3', 0, ['ECON150', 'MATH101']],\n    ['s5', 1, ['BIO130', 'PHYS110']]]),\n  ('partial repair guard 3',\n   [[['s5', 'BIO130'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s3', 'BIO130'], ['s4', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'HIST140'], ['s3', 'CHEM120'], ['s4', 'CHEM120'], ['s2', 'CHEM120'],\n     ['s2', 'BIO130'], ['s4', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 1, ['BIO130', 'CHEM120']], ['s3', 1, ['BIO130', 'CHEM120']], ['s4', 1, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s1', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'BIO130'], ['s2', 'HIST140']],\n    {'PHYS110': 1, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 0}, []],\n   [['s1', 1, ['CHEM120', 'PHYS110']], ['s2', 0, ['BIO130', 'HIST140']]]),\n  ('normal control 5',\n   [[['s1', 'PHYS110'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 6',\n   [[['s2', 'PHYS110'], ['s5', 'MATH101'], ['s2', 'ECON150'], ['s2', 'HIST140'], ['s2', 'ECON150'],\n     ['s1', 'BIO130'], ['s5', 'CHEM120'], ['s2', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 1, ['HIST140', 'PHYS110']], ['s5', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s3', 'BIO130'], ['s1', 'MATH101'], ['s1', 'MATH101'], ['s5', 'MATH101'], ['s1', 'BIO130'],\n     ['s1', 'MATH101H'], ['s4', 'MATH101'], ['s1', 'HIST140']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'HIST140': 3}, []],\n   [['s1', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s4', 'ECON150'], ['s1', 'PHYS110'], ['s4', 'BIO130'], ['s3', 'MATH101'], ['s3', 'CHEM120'],\n     ['s2', 'MATH101H'], ['s3', 'HIST140'], ['s2', 'BIO130'], ['s4', 'PHYS110'], ['s3', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 2, ['CHEM120', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'BIO130'], ['s3', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s3', 'MATH101H']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s2', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'HIST140'], ['s1', 'MATH101'], ['s2', 'MATH101H'],\n     ['s2', 'MATH101'], ['s4', 'ECON150']],\n    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 1, 'CHEM120': 1, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['HIST140', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s5', 'HIST140'], ['s4', 'HIST140'], ['s4', 'MATH101'], ['s5', 'CHEM120'], ['s1', 'PHYS110'],\n     ['s4', 'MATH101H'], ['s1', 'BIO130'], ['s5', 'ECON150'], ['s5', 'BIO130'], ['s4', 'MATH101'],\n     ['s1', 'CHEM120'], ['s4', 'PHYS110']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 1, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 1, ['BIO130', 'PHYS110']], ['s4', 0, ['HIST140', 'MATH101']], ['s4', 1, ['MATH101', 'PHYS110']],\n    ['s5', 0, ['ECON150', 'HIST140']]]),\n  ('boundary control 4',\n   [[['s1', 'MATH101'], ['s1', 'MATH101H']], {'MATH101': 0, 'MATH101H': 0}, [['MATH101H', 'MATH101']]], []),\n  ('normal control 5',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s4', 'ECON150'], ['s1', 'CHEM120'], ['s4', 'MATH101'], ['s1', 'HIST140'], ['s5', 'HIST140'],\n     ['s4', 'PHYS110'], ['s1', 'BIO130'], ['s4', 'BIO130'], ['s1', 'MATH101'], ['s1', 'BIO130']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 3, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 3, ['BIO130', 'CHEM120', 'HIST140']], ['s4', 0, ['MATH101', 'PHYS110']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'MATH101'], ['s2', 'HIST140'],\n     ['s2', 'CHEM120'], ['s5', 'MATH101H'], ['s1', 'MATH101'], ['s2', 'MATH101H'], ['s5', 'PHYS110'],\n     ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s2', 2, ['CHEM120', 'PHYS110']], ['s2', 3, ['HIST140', 'MATH101H']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s5', 'HIST140'], ['s2', 'ECON150'], ['s5', 'MATH101H'], ['s3', 'BIO130'],\n     ['s2', 'PHYS110'], ['s3', 'MATH101'], ['s3', 'HIST140'], ['s4', 'CHEM120'], ['s3', 'ECON150'],\n     ['s4', 'MATH101H'], ['s1', 'CHEM120']],\n    {'MATH101': 2, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 3, 'HIST140': 3, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['ECON150', 'PHYS110']], ['s3', 3, ['BIO130', 'ECON150', 'HIST140']]])],\n [('regression: cross listed paper 1',\n   [[['s3', 'ECON150'], ['s1', 'MATH101'], ['s5', 'ECON150'], ['s3', 'ECON150'], ['s4', 'CHEM120'],\n     ['s5', 'CHEM120'], ['s5', 'MATH101'], ['s3', 'HIST140'], ['s2', 'MATH101H'], ['s5', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'MATH101H'], ['s3', 'MATH101'], ['s2', 'MATH101']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 0, ['HIST140', 'MATH101']], ['s3', 3, ['ECON150', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s5', 'CHEM120'], ['s1', 'BIO130'], ['s1', 'ECON150'], ['s2', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s2', 'MATH101'], ['s5', 'MATH101H'], ['s5', 'ECON150'], ['s1', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 0, 'ECON150': 3},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 3, ['CHEM120', 'ECON150', 'MATH101']], ['s5', 3, ['CHEM120', 'ECON150', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s1', 'HIST140'], ['s4', 'HIST140'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s1', 'CHEM120'],\n     ['s1', 'MATH101H'], ['s3', 'ECON150'], ['s3', 'PHYS110'], ['s5', 'PHYS110'], ['s4', 'BIO130'],\n     ['s5', 'ECON150']],\n    {'MATH101': 3, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 2, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s4', 2, ['BIO130', 'HIST140']], ['s5', 2, ['BIO130', 'CHEM120']]]),\n  ('boundary control 4',\n   [[['s2', 'ECON150'], ['s1', 'ECON150'], ['s2', 'BIO130'], ['s1', 'BIO130']], {'ECON150': 2, 'BIO130': 2},\n    []],\n   [['s1', 2, ['BIO130', 'ECON150']], ['s2', 2, ['BIO130', 'ECON150']]]),\n  ('normal control 5',\n   [[['s2', 'ECON150'], ['s2', 'ECON150'], ['s2', 'BIO130'], ['s3', 'MATH101'], ['s2', 'MATH101'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 3, 'BIO130': 3, 'ECON150': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 3, ['BIO130', 'CHEM120']]]),\n  ('normal control 6',\n   [[['s5', 'MATH101'], ['s3', 'HIST140'], ['s5', 'HIST140'], ['s5', 'PHYS110'], ['s3', 'BIO130'],\n     ['s3', 'CHEM120'], ['s3', 'MATH101H'], ['s3', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'ECON150': 2}, []],\n   [['s3', 2, ['CHEM120', 'MATH101H']]]),\n  ('normal control 7',\n   [[['s1', 'BIO130'], ['s4', 'ECON150'], ['s4', 'CHEM120'], ['s4', 'MATH101H']],\n    {'MATH101': 2, 'PHYS110': 1, 'CHEM120': 3, 'HIST140': 3, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 8',\n   [[['s5', 'ECON150'], ['s3', 'ECON150'], ['s1', 'CHEM120'], ['s1', 'BIO130'], ['s3', 'BIO130'],\n     ['s5', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'HIST140'], ['s3', 'MATH101'], ['s1', 'PHYS110']],\n    {'MATH101': 0, 'MATH101H': 1, 'PHYS110': 0, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'CHEM120', 'ECON150', 'PHYS110']], ['s3', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s5', 0, ['ECON150', 'HIST140', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'PHYS110'], ['s3', 'CHEM120'], ['s1', 'BIO130'], ['s5', 'BIO130'], ['s5', 'MATH101H'],\n     ['s4', 'BIO130'], ['s5', 'CHEM120'], ['s4', 'MATH101'], ['s2', 'ECON150'], ['s5', 'HIST140'],\n     ['s3', 'CHEM120'], ['s1', 'HIST140']],\n    {'MATH101': 1, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s5', 0, ['BIO130', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s3', 'CHEM120'], ['s2', 'CHEM120'], ['s1', 'MATH101H'], ['s1', 'PHYS110'], ['s5', 'ECON150'],\n     ['s4', 'BIO130'], ['s1', 'BIO130'], ['s5', 'PHYS110'], ['s2', 'MATH101'], ['s5', 'BIO130'],\n     ['s5', 'MATH101H']],\n    {'MATH101': 2, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 2, ['CHEM120', 'MATH101']], ['s2', 2, ['CHEM120', 'MATH101']], ['s5', 1, ['BIO130', 'ECON150']],\n    ['s5', 2, ['CHEM120', 'MATH101']]]),\n  ('partial repair guard 3',\n   [[['s2', 'ECON150'], ['s3', 'PHYS110'], ['s1', 'ECON150'], ['s5', 'ECON150'], ['s2', 'HIST140'],\n     ['s5', 'PHYS110'], ['s2', 'BIO130'], ['s1', 'HIST140'], ['s2', 'MATH101'], ['s4', 'BIO130'],\n     ['s3', 'ECON150'], ['s1', 'BIO130'], ['s2', 'ECON150'], ['s4', 'ECON150'], ['s5', 'MATH101H']],\n    {'MATH101': 0, 'PHYS110': 0, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 1, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s1', 0, ['BIO130', 'ECON150']], ['s2', 0, ['BIO130', 'ECON150', 'MATH101']],\n    ['s3', 0, ['ECON150', 'PHYS110']], ['s4', 0, ['BIO130', 'ECON150']], ['s5', 0, ['ECON150', 'PHYS110']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'PHYS110']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s5', 'CHEM120'], ['s5', 'HIST140'], ['s1', 'HIST140'], ['s1', 'PHYS110'], ['s1', 'MATH101H'],\n     ['s5', 'ECON150'], ['s3', 'BIO130'], ['s5', 'MATH101H'], ['s1', 'CHEM120'], ['s1', 'HIST140'],\n     ['s2', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 1, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 3, 'ECON150': 1}, []],\n   [['s1', 1, ['MATH101H', 'PHYS110']], ['s1', 3, ['CHEM120', 'HIST140']], ['s5', 1, ['ECON150', 'MATH101H']],\n    ['s5', 3, ['CHEM120', 'HIST140']]]),\n  ('normal control 6',\n   [[['s3', 'CHEM120'], ['s5', 'CHEM120'], ['s3', 'BIO130'], ['s4', 'MATH101H'], ['s3', 'MATH101H'],\n     ['s3', 'PHYS110'], ['s3', 'CHEM120']],\n    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 1, 'ECON150': 3},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s3', 2, ['CHEM120', 'MATH101']]]),\n  ('normal control 7',\n   [[['s4', 'PHYS110'], ['s1', 'CHEM120'], ['s2', 'CHEM120'], ['s3', 'CHEM120'], ['s2', 'BIO130'],\n     ['s4', 'BIO130'], ['s3', 'PHYS110'], ['s3', 'ECON150'], ['s4', 'ECON150']],\n    {'MATH101': 1, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 3}, []],\n   [['s3', 3, ['ECON150', 'PHYS110']], ['s4', 3, ['ECON150', 'PHYS110']]]),\n  ('normal control 8',\n   [[['s5', 'MATH101'], ['s4', 'CHEM120'], ['s5', 'PHYS110'], ['s3', 'HIST140'], ['s5', 'MATH101H'],\n     ['s4', 'ECON150'], ['s4', 'MATH101H'], ['s4', 'PHYS110'], ['s5', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 0, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101H', 'MATH101']]],\n   [['s4', 0, ['CHEM120', 'MATH101']], ['s5', 0, ['BIO130', 'MATH101']], ['s5', 3, ['MATH101', 'PHYS110']]])],\n [('regression: cross listed paper 1',\n   [[['s2', 'ECON150'], ['s5', 'MATH101'], ['s2', 'HIST140'], ['s2', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2, 'CHEM120': 1, 'BIO130': 0, 'HIST140': 3, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 3, ['HIST140', 'MATH101']]]),\n  ('regression variant: cross listed paper 2',\n   [[['s1', 'HIST140'], ['s2', 'CHEM120'], ['s4', 'BIO130'], ['s4', 'ECON150'], ['s4', 'PHYS110'],\n     ['s2', 'MATH101H'], ['s5', 'CHEM120'], ['s4', 'HIST140'], ['s1', 'MATH101'], ['s1', 'ECON150'],\n     ['s2', 'BIO130']],\n    {'MATH101': 3, 'MATH101H': 1, 'PHYS110': 3, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 1, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s1', 1, ['ECON150', 'HIST140']], ['s4', 1, ['ECON150', 'HIST140']], ['s4', 3, ['BIO130', 'CHEM120']]]),\n  ('partial repair guard 3',\n   [[['s4', 'MATH101'], ['s5', 'BIO130'], ['s3', 'CHEM120'], ['s4', 'ECON150'], ['s1', 'MATH101'],\n     ['s3', 'BIO130'], ['s3', 'HIST140'], ['s1', 'BIO130'], ['s3', 'MATH101H']],\n    {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 0, 'CHEM120': 3, 'BIO130': 2, 'HIST140': 1},\n    [['MATH101H', 'MATH101']]],\n   [['s3', 3, ['CHEM120', 'MATH101']]]),\n  ('boundary control 4', [[['s1', 'MATH101'], ['s1', 'MATH101']], {'MATH101': 0}, []], []),\n  ('normal control 5',\n   [[['s2', 'MATH101H'], ['s1', 'HIST140'], ['s4', 'PHYS110'], ['s1', 'MATH101H'], ['s2', 'CHEM120'],\n     ['s4', 'HIST140'], ['s2', 'PHYS110'], ['s4', 'MATH101H'], ['s5', 'ECON150'], ['s2', 'MATH101']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 3, 'HIST140': 2, 'ECON150': 0},\n    [['MATH101H', 'MATH101']]],\n   [['s2', 0, ['CHEM120', 'MATH101']]]),\n  ('normal control 6',\n   [[['s5', 'BIO130']],\n    {'MATH101': 2, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 0, 'HIST140': 2, 'ECON150': 1},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   []),\n  ('normal control 7',\n   [[['s2', 'ECON150'], ['s2', 'PHYS110'], ['s2', 'CHEM120'], ['s2', 'HIST140']],\n    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 1, 'CHEM120': 0, 'BIO130': 2, 'HIST140': 0, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [['s2', 0, ['CHEM120', 'HIST140']]]),\n  ('normal control 8',\n   [[['s2', 'ECON150']],\n    {'MATH101': 0, 'MATH101H': 0, 'PHYS110': 3, 'CHEM120': 2, 'HIST140': 1, 'ECON150': 2},\n    [['MATH101', 'MATH101H'], ['PHYS110', 'CHEM120']]],\n   [])]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Stipulated toy exam-timetabling rule set for a bounded model; it does not claim conformance with any institution's regulations or a benchmark specification, and it performs no search or optimisation. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-exam-timetabling-constraints-student-clash-report-cross-listed-paper","generated_at":"2026-09-29T14:52:03.462211+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Clash detection is the primary hard constraint of exam timetabling; duplicate enrolments and cross-listing are the usual sources of false clashes.","repair":"Map each exam to the smallest id of its cross-listing group.","root_cause":"Exam ids are not mapped to their cross-listing canonical paper.","sha256":"712e02be910e1e0af6b01566a4a6b2fbceb5d8798339210c3232503f1ee47902","title":"Cross-listed course codes treated as separate papers · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.845,"exit_code":1,"observations":[{"actual":[],"check":"regression: cross listed paper 1","expected":[],"passed":true},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101H"]],["s5",1,["BIO130","PHYS110"]]],"check":"regression variant: cross listed paper 2","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101"]],["s5",1,["BIO130","PHYS110"]]],"passed":false},{"actual":[["s2",1,["BIO130","PHYS110"]],["s3",1,["BIO130","PHYS110"]],["s4",1,["BIO130","PHYS110"]]],"check":"partial repair guard 3","expected":[["s2",1,["BIO130","CHEM120"]],["s3",1,["BIO130","CHEM120"]],["s4",1,["BIO130","CHEM120"]]],"passed":false},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"check":"boundary control 4","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101H"]]],"check":"normal control 6","expected":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101"]]],"passed":false},{"actual":[["s1",3,["HIST140","MATH101H"]]],"check":"normal control 7","expected":[["s1",3,["HIST140","MATH101H"]]],"passed":true},{"actual":[["s3",2,["CHEM120","PHYS110"]]],"check":"normal control 8","expected":[["s3",2,["CHEM120","PHYS110"]]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: cross listed paper 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"regression variant: cross listed paper 2\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101H\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"s2\", 1, [\"BIO130\", \"PHYS110\"]], [\"s3\", 1, [\"BIO130\", \"PHYS110\"]], [\"s4\", 1, [\"BIO130\", \"PHYS110\"]]], \"expected\": [[\"s2\", 1, [\"BIO130\", \"CHEM120\"]], [\"s3\", 1, [\"BIO130\", \"CHEM120\"]], [\"s4\", 1, [\"BIO130\", \"CHEM120\"]]], \"passed\": false}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101H\"]]], \"expected\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101\"]]], \"passed\": false}, {\"check\": \"normal control 7\", \"actual\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"expected\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"expected\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.005,"exit_code":1,"observations":[{"actual":[["s1",0,["MATH101","MATH101H"]]],"check":"regression: cross listed paper 1","expected":[],"passed":false},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101H"]],["s5",1,["BIO130","PHYS110"]]],"check":"regression variant: cross listed paper 2","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101"]],["s5",1,["BIO130","PHYS110"]]],"passed":false},{"actual":[["s2",1,["BIO130","CHEM120"]],["s3",1,["BIO130","CHEM120"]],["s4",1,["BIO130","CHEM120"]]],"check":"partial repair guard 3","expected":[["s2",1,["BIO130","CHEM120"]],["s3",1,["BIO130","CHEM120"]],["s4",1,["BIO130","CHEM120"]]],"passed":true},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"check":"boundary control 4","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101"]]],"check":"normal control 6","expected":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101"]]],"passed":true},{"actual":[["s1",3,["HIST140","MATH101H"]]],"check":"normal control 7","expected":[["s1",3,["HIST140","MATH101H"]]],"passed":true},{"actual":[["s3",2,["CHEM120","PHYS110"]]],"check":"normal control 8","expected":[["s3",2,["CHEM120","PHYS110"]]],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: cross listed paper 1\", \"actual\": [[\"s1\", 0, [\"MATH101\", \"MATH101H\"]]], \"expected\": [], \"passed\": false}, {\"check\": \"regression variant: cross listed paper 2\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101H\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"passed\": false}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"s2\", 1, [\"BIO130\", \"CHEM120\"]], [\"s3\", 1, [\"BIO130\", \"CHEM120\"]], [\"s4\", 1, [\"BIO130\", \"CHEM120\"]]], \"expected\": [[\"s2\", 1, [\"BIO130\", \"CHEM120\"]], [\"s3\", 1, [\"BIO130\", \"CHEM120\"]], [\"s4\", 1, [\"BIO130\", \"CHEM120\"]]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101\"]]], \"expected\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101\"]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"expected\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"expected\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":41.186,"exit_code":0,"observations":[{"actual":[],"check":"regression: cross listed paper 1","expected":[],"passed":true},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101"]],["s5",1,["BIO130","PHYS110"]]],"check":"regression variant: cross listed paper 2","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",1,["CHEM120","PHYS110"]],["s3",0,["ECON150","MATH101"]],["s5",1,["BIO130","PHYS110"]]],"passed":true},{"actual":[["s2",1,["BIO130","CHEM120"]],["s3",1,["BIO130","CHEM120"]],["s4",1,["BIO130","CHEM120"]]],"check":"partial repair guard 3","expected":[["s2",1,["BIO130","CHEM120"]],["s3",1,["BIO130","CHEM120"]],["s4",1,["BIO130","CHEM120"]]],"passed":true},{"actual":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"check":"boundary control 4","expected":[["s1",1,["CHEM120","PHYS110"]],["s2",0,["BIO130","HIST140"]]],"passed":true},{"actual":[],"check":"normal control 5","expected":[],"passed":true},{"actual":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101"]]],"check":"normal control 6","expected":[["s2",1,["HIST140","PHYS110"]],["s5",3,["CHEM120","MATH101"]]],"passed":true},{"actual":[["s1",3,["HIST140","MATH101H"]]],"check":"normal control 7","expected":[["s1",3,["HIST140","MATH101H"]]],"passed":true},{"actual":[["s3",2,["CHEM120","PHYS110"]]],"check":"normal control 8","expected":[["s3",2,["CHEM120","PHYS110"]]],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: cross listed paper 1\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"regression variant: cross listed paper 2\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s3\", 0, [\"ECON150\", \"MATH101\"]], [\"s5\", 1, [\"BIO130\", \"PHYS110\"]]], \"passed\": true}, {\"check\": \"partial repair guard 3\", \"actual\": [[\"s2\", 1, [\"BIO130\", \"CHEM120\"]], [\"s3\", 1, [\"BIO130\", \"CHEM120\"]], [\"s4\", 1, [\"BIO130\", \"CHEM120\"]]], \"expected\": [[\"s2\", 1, [\"BIO130\", \"CHEM120\"]], [\"s3\", 1, [\"BIO130\", \"CHEM120\"]], [\"s4\", 1, [\"BIO130\", \"CHEM120\"]]], \"passed\": true}, {\"check\": \"boundary control 4\", \"actual\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"expected\": [[\"s1\", 1, [\"CHEM120\", \"PHYS110\"]], [\"s2\", 0, [\"BIO130\", \"HIST140\"]]], \"passed\": true}, {\"check\": \"normal control 5\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"normal control 6\", \"actual\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101\"]]], \"expected\": [[\"s2\", 1, [\"HIST140\", \"PHYS110\"]], [\"s5\", 3, [\"CHEM120\", \"MATH101\"]]], \"passed\": true}, {\"check\": \"normal control 7\", \"actual\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"expected\": [[\"s1\", 3, [\"HIST140\", \"MATH101H\"]]], \"passed\": true}, {\"check\": \"normal control 8\", \"actual\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"expected\": [[\"s3\", 2, [\"CHEM120\", \"PHYS110\"]]], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}