FAILURE MAP
← Case archive

FA-94561 / Exam timetabling constraints / Open access

Front-load selection takes one exam too few · case 01

The big-th largest exam can be scheduled last without penalty.

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

ROOT CAUSE

The ranked slice stops at big - 1.

VERIFIED REPAIR

Take exactly the first big exams of the ranking.

Unsuccessful approach: Selecting by a size threshold includes every exam tied at the boundary.

Case contract

sizes exam -> candidates, period exam -> period index, n_periods, big = how many largest exams are front-loaded (ranked by size descending, ties by id), last = how many final periods to avoid. Return the sorted front-loaded exams scheduled in the final last periods and their count.

Why this case matters

Front-loading large exams gives markers time; it is a standard soft constraint.

1 / The failure

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

N = 1
observations = []
def solve(sizes, period, n_periods, big, last):
    ranked = sorted(sizes, key=lambda e: (-sizes[e], e))[:big - 1]
    bad = sorted(e for e in ranked if period[e] >= n_periods - last)
    return [bad, len(bad)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: tie inclusive selection 1', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 20}, {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 2}, 8, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 50, 'MATH101H': 200, 'PHYS110': 50, 'CHEM120': 20, 'BIO130': 80},
    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 9, 'CHEM120': 7, 'BIO130': 3}, 10, 3, 2],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('normal control 5',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 0, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 5}, 10, 1, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80,
     'MATH101H': 200,
     'PHYS110': 80,
     'CHEM120': 200,
     'BIO130': 80,
     'HIST140': 200,
     'ECON150': 200},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 5, 'BIO130': 3, 'HIST140': 4, 'ECON150': 2}, 8, 3,
    2],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 120, 'HIST140': 20},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 1, 'HIST140': 1}, 6, 2, 2],
   [['CHEM120', 'MATH101H'], 2]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 120, 'PHYS110': 80, 'CHEM120': 20},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4}, 10, 3, 2],
   [[], 0])],
 [('regression: tie inclusive selection 1', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2],
   [['A', 'B'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 200}, {'MATH101': 5, 'MATH101H': 7, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'MATH101H', 'PHYS110'], 3]),
  ('partial repair guard 3',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 20, 'CHEM120': 120, 'BIO130': 80},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 0, 'BIO130': 0}, 6, 3, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 5',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 20},
    {'MATH101': 9, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 3}, 10, 2, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 20},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 2}, 8, 3, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 200, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 120, 'BIO130': 20, 'HIST140': 120},
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 4, 'HIST140': 5}, 6, 1, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 20, 'PHYS110': 200, 'CHEM120': 50, 'BIO130': 50, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 4}, 6, 2, 3],
   [['HIST140', 'PHYS110'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 80}, {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 3}, 8, 1, 3],
   [['MATH101H'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 0}, 6, 1, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('boundary control 5', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 6, 'PHYS110': 6, 'CHEM120': 7, 'BIO130': 0, 'HIST140': 0}, 8, 3, 3],
   [['CHEM120'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 80}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 4}, 6, 2, 3],
   [['MATH101'], 1]),
  ('normal control 8',
   [{'MATH101': 80,
     'MATH101H': 50,
     'PHYS110': 50,
     'CHEM120': 80,
     'BIO130': 20,
     'HIST140': 200,
     'ECON150': 80},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 1}, 6, 1,
    2],
   [['HIST140'], 1])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 3}, 6, 2, 3],
   [['CHEM120', 'HIST140'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 50}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'PHYS110'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 200},
    {'MATH101': 4, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2}, 6, 3, 3],
   [['CHEM120'], 1]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 120}, {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2}, 6, 1, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4}, 6, 3, 3],
   [['CHEM120', 'MATH101', 'MATH101H'], 3]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 120, 'MATH101H': 20, 'PHYS110': 120, 'CHEM120': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 9, 'CHEM120': 2}, 10, 3, 2],
   [['PHYS110'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 50, 'PHYS110': 80}, {'MATH101': 4, 'MATH101H': 0, 'PHYS110': 0}, 6, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 200,
     'MATH101H': 200,
     'PHYS110': 50,
     'CHEM120': 50,
     'BIO130': 80,
     'HIST140': 120,
     'ECON150': 120},
    {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, 6, 1,
    2],
   [['MATH101'], 1]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('normal control 6',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 80},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 1}, 6, 3, 3],
   [['MATH101H'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 50},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 4}, 6, 3, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 20, 'CHEM120': 20, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 7, 'MATH101H': 1, 'PHYS110': 4, 'CHEM120': 9, 'BIO130': 2, 'HIST140': 8}, 10, 1, 3],
   [['HIST140'], 1])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: tie inclusive selection 1[[], 0][['A'], 1]Failed
regression variant: tie inclusive selection 2[[], 0][['MATH101'], 1]Failed
partial repair guard 3[[], 0][[], 0]Passed
boundary control 4[['A'], 1][['A', 'B'], 2]Failed
normal control 5[[], 0][[], 0]Passed
normal control 6[[], 0][[], 0]Passed
normal control 7[['CHEM120'], 1][['CHEM120', 'MATH101H'], 2]Failed
normal control 8[[], 0][[], 0]Passed

SHA-256 / fd75c05624a58da3f84247f29104f2aec14dfc811cd3023af883c376a399355f

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(sizes, period, n_periods, big, last):
    ranked = [e for e in sizes if sizes[e] >= sorted(sizes.values())[-big]]
    bad = sorted(e for e in ranked if period[e] >= n_periods - last)
    return [bad, len(bad)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: tie inclusive selection 1', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 20}, {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 2}, 8, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 50, 'MATH101H': 200, 'PHYS110': 50, 'CHEM120': 20, 'BIO130': 80},
    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 9, 'CHEM120': 7, 'BIO130': 3}, 10, 3, 2],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('normal control 5',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 0, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 5}, 10, 1, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80,
     'MATH101H': 200,
     'PHYS110': 80,
     'CHEM120': 200,
     'BIO130': 80,
     'HIST140': 200,
     'ECON150': 200},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 5, 'BIO130': 3, 'HIST140': 4, 'ECON150': 2}, 8, 3,
    2],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 120, 'HIST140': 20},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 1, 'HIST140': 1}, 6, 2, 2],
   [['CHEM120', 'MATH101H'], 2]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 120, 'PHYS110': 80, 'CHEM120': 20},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4}, 10, 3, 2],
   [[], 0])],
 [('regression: tie inclusive selection 1', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2],
   [['A', 'B'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 200}, {'MATH101': 5, 'MATH101H': 7, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'MATH101H', 'PHYS110'], 3]),
  ('partial repair guard 3',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 20, 'CHEM120': 120, 'BIO130': 80},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 0, 'BIO130': 0}, 6, 3, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 5',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 20},
    {'MATH101': 9, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 3}, 10, 2, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 20},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 2}, 8, 3, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 200, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 120, 'BIO130': 20, 'HIST140': 120},
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 4, 'HIST140': 5}, 6, 1, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 20, 'PHYS110': 200, 'CHEM120': 50, 'BIO130': 50, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 4}, 6, 2, 3],
   [['HIST140', 'PHYS110'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 80}, {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 3}, 8, 1, 3],
   [['MATH101H'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 0}, 6, 1, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('boundary control 5', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 6, 'PHYS110': 6, 'CHEM120': 7, 'BIO130': 0, 'HIST140': 0}, 8, 3, 3],
   [['CHEM120'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 80}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 4}, 6, 2, 3],
   [['MATH101'], 1]),
  ('normal control 8',
   [{'MATH101': 80,
     'MATH101H': 50,
     'PHYS110': 50,
     'CHEM120': 80,
     'BIO130': 20,
     'HIST140': 200,
     'ECON150': 80},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 1}, 6, 1,
    2],
   [['HIST140'], 1])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 3}, 6, 2, 3],
   [['CHEM120', 'HIST140'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 50}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'PHYS110'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 200},
    {'MATH101': 4, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2}, 6, 3, 3],
   [['CHEM120'], 1]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 120}, {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2}, 6, 1, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4}, 6, 3, 3],
   [['CHEM120', 'MATH101', 'MATH101H'], 3]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 120, 'MATH101H': 20, 'PHYS110': 120, 'CHEM120': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 9, 'CHEM120': 2}, 10, 3, 2],
   [['PHYS110'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 50, 'PHYS110': 80}, {'MATH101': 4, 'MATH101H': 0, 'PHYS110': 0}, 6, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 200,
     'MATH101H': 200,
     'PHYS110': 50,
     'CHEM120': 50,
     'BIO130': 80,
     'HIST140': 120,
     'ECON150': 120},
    {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, 6, 1,
    2],
   [['MATH101'], 1]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('normal control 6',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 80},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 1}, 6, 3, 3],
   [['MATH101H'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 50},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 4}, 6, 3, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 20, 'CHEM120': 20, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 7, 'MATH101H': 1, 'PHYS110': 4, 'CHEM120': 9, 'BIO130': 2, 'HIST140': 8}, 10, 1, 3],
   [['HIST140'], 1])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: tie inclusive selection 1[['A'], 1][['A'], 1]Passed
regression variant: tie inclusive selection 2[['MATH101'], 1][['MATH101'], 1]Passed
partial repair guard 3[['PHYS110'], 1][[], 0]Failed
boundary control 4[['A', 'B'], 2][['A', 'B'], 2]Passed
normal control 5[[], 0][[], 0]Passed
normal control 6[[], 0][[], 0]Passed
normal control 7[['CHEM120', 'MATH101H'], 2][['CHEM120', 'MATH101H'], 2]Passed
normal control 8[[], 0][[], 0]Passed

SHA-256 / 8a654720a1e8520f4e0cc6feac7004d695a80100f45a37617060ef191e7cbd7d

3 / The verified repair

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

N = 1
observations = []
def solve(sizes, period, n_periods, big, last):
    ranked = sorted(sizes, key=lambda e: (-sizes[e], e))[:big]
    bad = sorted(e for e in ranked if period[e] >= n_periods - last)
    return [bad, len(bad)]
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: tie inclusive selection 1', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 20}, {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 2}, 8, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 50, 'MATH101H': 200, 'PHYS110': 50, 'CHEM120': 20, 'BIO130': 80},
    {'MATH101': 7, 'MATH101H': 3, 'PHYS110': 9, 'CHEM120': 7, 'BIO130': 3}, 10, 3, 2],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('normal control 5',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 0, 'MATH101H': 4, 'PHYS110': 6, 'CHEM120': 5}, 10, 1, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80,
     'MATH101H': 200,
     'PHYS110': 80,
     'CHEM120': 200,
     'BIO130': 80,
     'HIST140': 200,
     'ECON150': 200},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 4, 'CHEM120': 5, 'BIO130': 3, 'HIST140': 4, 'ECON150': 2}, 8, 3,
    2],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 120, 'HIST140': 20},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 3, 'CHEM120': 5, 'BIO130': 1, 'HIST140': 1}, 6, 2, 2],
   [['CHEM120', 'MATH101H'], 2]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 120, 'PHYS110': 80, 'CHEM120': 20},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4}, 10, 3, 2],
   [[], 0])],
 [('regression: tie inclusive selection 1', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2],
   [['A', 'B'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 200}, {'MATH101': 5, 'MATH101H': 7, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'MATH101H', 'PHYS110'], 3]),
  ('partial repair guard 3',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 20, 'CHEM120': 120, 'BIO130': 80},
    {'MATH101': 2, 'MATH101H': 4, 'PHYS110': 5, 'CHEM120': 0, 'BIO130': 0}, 6, 3, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 5',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 20},
    {'MATH101': 9, 'MATH101H': 7, 'PHYS110': 5, 'CHEM120': 3}, 10, 2, 2],
   [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 200, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 20},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 2, 'BIO130': 2}, 8, 3, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 200, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 120, 'BIO130': 20, 'HIST140': 120},
    {'MATH101': 3, 'MATH101H': 2, 'PHYS110': 2, 'CHEM120': 0, 'BIO130': 4, 'HIST140': 5}, 6, 1, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 20, 'PHYS110': 200, 'CHEM120': 50, 'BIO130': 50, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 4, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 4}, 6, 2, 3],
   [['HIST140', 'PHYS110'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 80}, {'MATH101': 7, 'MATH101H': 5, 'PHYS110': 3}, 8, 1, 3],
   [['MATH101H'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80},
    {'MATH101': 3, 'MATH101H': 0, 'PHYS110': 0, 'CHEM120': 0}, 6, 1, 3],
   [[], 0]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('boundary control 5', [{'A': 80, 'B': 80, 'C': 20}, {'A': 1, 'B': 9, 'C': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 80},
    {'MATH101': 5, 'MATH101H': 6, 'PHYS110': 6, 'CHEM120': 7, 'BIO130': 0, 'HIST140': 0}, 8, 3, 3],
   [['CHEM120'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 120, 'PHYS110': 80}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 4}, 6, 2, 3],
   [['MATH101'], 1]),
  ('normal control 8',
   [{'MATH101': 80,
     'MATH101H': 50,
     'PHYS110': 50,
     'CHEM120': 80,
     'BIO130': 20,
     'HIST140': 200,
     'ECON150': 80},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 3, 'CHEM120': 4, 'BIO130': 4, 'HIST140': 4, 'ECON150': 1}, 6, 1,
    2],
   [['HIST140'], 1])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 120, 'CHEM120': 200, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 5, 'CHEM120': 4, 'BIO130': 5, 'HIST140': 3}, 6, 2, 3],
   [['CHEM120', 'HIST140'], 2]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 120, 'MATH101H': 80, 'PHYS110': 50}, {'MATH101': 5, 'MATH101H': 1, 'PHYS110': 7}, 8, 3, 3],
   [['MATH101', 'PHYS110'], 2]),
  ('partial repair guard 3',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 80, 'CHEM120': 80, 'BIO130': 80, 'HIST140': 200},
    {'MATH101': 4, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 3, 'BIO130': 0, 'HIST140': 2}, 6, 3, 3],
   [['CHEM120'], 1]),
  ('boundary control 4', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 7, 'B': 9}, 10, 1, 2], [[], 0]),
  ('normal control 6',
   [{'MATH101': 80, 'MATH101H': 20, 'PHYS110': 120}, {'MATH101': 0, 'MATH101H': 3, 'PHYS110': 2}, 6, 1, 3],
   [[], 0]),
  ('normal control 7',
   [{'MATH101': 50, 'MATH101H': 80, 'PHYS110': 50, 'CHEM120': 80},
    {'MATH101': 5, 'MATH101H': 4, 'PHYS110': 1, 'CHEM120': 4}, 6, 3, 3],
   [['CHEM120', 'MATH101', 'MATH101H'], 3]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120}, {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0}, 6, 3, 2],
   [['MATH101', 'MATH101H'], 2])],
 [('regression: tie inclusive selection 1',
   [{'MATH101': 120, 'MATH101H': 20, 'PHYS110': 120, 'CHEM120': 120},
    {'MATH101': 5, 'MATH101H': 2, 'PHYS110': 9, 'CHEM120': 2}, 10, 3, 2],
   [['PHYS110'], 1]),
  ('regression variant: tie inclusive selection 2',
   [{'MATH101': 50, 'MATH101H': 50, 'PHYS110': 80}, {'MATH101': 4, 'MATH101H': 0, 'PHYS110': 0}, 6, 2, 3],
   [['MATH101'], 1]),
  ('partial repair guard 3',
   [{'MATH101': 200,
     'MATH101H': 200,
     'PHYS110': 50,
     'CHEM120': 50,
     'BIO130': 80,
     'HIST140': 120,
     'ECON150': 120},
    {'MATH101': 5, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 2, 'BIO130': 2, 'HIST140': 3, 'ECON150': 3}, 6, 1,
    2],
   [['MATH101'], 1]),
  ('boundary control 4', [{'A': 80, 'B': 80, 'C': 20}, {'A': 9, 'B': 9, 'C': 9}, 10, 2, 2], [['A', 'B'], 2]),
  ('boundary control 5', [{'A': 100, 'B': 50}, {'A': 8, 'B': 9}, 10, 1, 2], [['A'], 1]),
  ('normal control 6',
   [{'MATH101': 20, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 80},
    {'MATH101': 4, 'MATH101H': 5, 'PHYS110': 0, 'CHEM120': 1}, 6, 3, 3],
   [['MATH101H'], 1]),
  ('normal control 7',
   [{'MATH101': 80, 'MATH101H': 80, 'PHYS110': 120, 'CHEM120': 50},
    {'MATH101': 3, 'MATH101H': 3, 'PHYS110': 3, 'CHEM120': 4}, 6, 3, 2],
   [[], 0]),
  ('normal control 8',
   [{'MATH101': 20, 'MATH101H': 50, 'PHYS110': 20, 'CHEM120': 20, 'BIO130': 50, 'HIST140': 120},
    {'MATH101': 7, 'MATH101H': 1, 'PHYS110': 4, 'CHEM120': 9, 'BIO130': 2, 'HIST140': 8}, 10, 1, 3],
   [['HIST140'], 1])]]
for label, args, expected in fixtures[N-1]:
    check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
Boundary fixtureActualExpectedOutcome
regression: tie inclusive selection 1[['A'], 1][['A'], 1]Passed
regression variant: tie inclusive selection 2[['MATH101'], 1][['MATH101'], 1]Passed
partial repair guard 3[[], 0][[], 0]Passed
boundary control 4[['A', 'B'], 2][['A', 'B'], 2]Passed
normal control 5[[], 0][[], 0]Passed
normal control 6[[], 0][[], 0]Passed
normal control 7[['CHEM120', 'MATH101H'], 2][['CHEM120', 'MATH101H'], 2]Passed
normal control 8[[], 0][[], 0]Passed

SHA-256 / b11f969fa7668fd643b90b18addb2661c0a9148da0bd600ff786c7e4802fe1c0

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

Case digest / 89991f8294092d547f486e7869c2907b968a1c040a2adc17ac4df1b347503f20