FA-94336 / Shift rostering labor rules / Open access
Accepted overtime not added to the day's worked minutes · case 01
The same worker can take several offers beyond the 12-hour maximum.
ROOT CAUSE
Daily minutes are not updated after an acceptance.
VERIFIED REPAIR
Add accepted minutes to the taker's daily total.
Unsuccessful approach: Overwriting the daily total with the offer forgets earlier hours.
Case contract
ledger: worker -> [overtime minutes charged, seniority rank (1 most senior), minutes already worked today]; offers: [minutes, workers who will refuse]. For each offer, candidates are ordered by charged overtime then seniority rank. Workers who would exceed 720 minutes today are skipped without charge; refusers are charged the offered minutes; the first remaining worker takes it and is charged and credited today. Return [taker per offer (or None), charged minutes by worker].
Why this case matters
Overtime equalization clauses require fair rotation of offers, including charging refusals.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(ledger, offers):
led = {w: list(v) for w, v in ledger.items()}
result = []
for minutes, refusers in offers:
cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
taker = None
for w in cands:
if led[w][2] + minutes > 720:
continue
if w in refusers:
led[w][0] += minutes
continue
taker = w
break
if taker is not None:
led[taker][0] += minutes
result.append(taker)
return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: daily minutes credit 1',
[{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
[[60, []], [240, ['q', 'r']]]],
[['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'p': [0, 2, 660]}, [[60, ['q']], [60, ['q', 'p']]]],
[['p', None], {'p': 60, 'q': 120}]),
('partial repair guard 3',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('normal control 4',
[{'q': [120, 1, 480], 'r': [120, 2, 480], 'p': [120, 3, 240]},
[[240, ['q']], [60, ['q', 'r']], [60, ['q']], [240, ['q']]]],
[['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}]),
('normal control 5',
[{'r': [240, 1, 480], 'p': [240, 2, 480], 'q': [120, 3, 480]}, [[120, ['p']], [60, ['p']]]],
[['q', 'r'], {'p': 240, 'q': 240, 'r': 300}]),
('normal control 6',
[{'p': [0, 1, 480], 'q': [60, 2, 600]}, [[240, []], [240, ['p', 'q']], [240, []], [60, []]]],
[['p', None, None, 'q'], {'p': 240, 'q': 120}]),
('normal control 7',
[{'r': [120, 1, 480], 'p': [240, 2, 0], 'q': [0, 3, 240], 's': [60, 4, 240]}, [[60, []]]],
[['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}]),
('normal control 8',
[{'r': [120, 1, 660], 'q': [120, 2, 240], 'p': [120, 3, 0]}, [[240, ['p']], [60, []], [240, ['r', 'p']]]],
[['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}])],
[('regression: daily minutes credit 1',
[{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
[[None, 'q', None, None], {'p': 240, 'q': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'r': [0, 2, 0], 's': [0, 3, 240], 'p': [60, 4, 600]},
[[240, []], [240, ['s']], [60, ['r']], [120, ['r', 's']]]],
[['r', 'r', 'q', 'p'], {'p': 180, 'q': 60, 'r': 480, 's': 240}]),
('partial repair guard 3',
[{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
[[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
[['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
('normal control 4', [{'q': [120, 1, 660], 'p': [240, 2, 0]}, [[60, []]]], [['q'], {'p': 240, 'q': 180}]),
('normal control 5', [{'p': [120, 1, 600], 'q': [120, 2, 480]}, [[120, []], [240, ['q']], [240, []]]],
[['p', None, 'q'], {'p': 240, 'q': 600}]),
('normal control 6',
[{'q': [120, 1, 600], 'r': [0, 2, 660], 'p': [60, 3, 0]}, [[60, ['p']], [60, ['q']], [120, ['q', 'r']]]],
[['r', 'p', 'p'], {'p': 240, 'q': 240, 'r': 60}]),
('normal control 7',
[{'q': [240, 1, 0], 'p': [120, 2, 660]}, [[240, []], [240, []], [240, ['q']], [60, ['p', 'q']]]],
[['q', 'q', None, None], {'p': 180, 'q': 1020}]),
('normal control 8', [{'r': [0, 1, 0], 'p': [120, 2, 240], 'q': [60, 3, 600]}, [[240, []]]],
[['r'], {'p': 120, 'q': 60, 'r': 240}])],
[('regression: daily minutes credit 1',
[{'p': [120, 1, 0], 'q': [120, 2, 600], 'r': [120, 3, 480]},
[[240, ['q']], [240, ['p']], [240, []], [240, ['q', 'p']]]],
[['p', 'r', 'p', None], {'p': 840, 'q': 120, 'r': 360}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [120, ['p', 'q']], [240, ['q', 'p']], [60, ['q']]]],
[['q', None, None, 'p'], {'p': 660, 'q': 240}]),
('partial repair guard 3',
[{'q': [120, 1, 600], 'p': [0, 2, 600]}, [[120, []], [240, ['p', 'q']], [60, ['q', 'p']], [120, ['q']]]],
[['p', None, None, None], {'p': 120, 'q': 300}]),
('normal control 4',
[{'q': [240, 1, 240], 'p': [120, 2, 660], 'r': [60, 3, 660], 's': [0, 4, 480]}, [[240, ['q']]]],
[['s'], {'p': 120, 'q': 240, 'r': 60, 's': 240}]),
('normal control 5',
[{'q': [120, 1, 240], 's': [240, 2, 600], 'r': [0, 3, 240], 'p': [0, 4, 480]}, [[240, ['r']]]],
[['p'], {'p': 240, 'q': 120, 'r': 240, 's': 240}]),
('normal control 6',
[{'r': [240, 1, 660], 'p': [60, 2, 600], 'q': [60, 3, 480]}, [[120, ['p']], [240, ['r']], [60, []]]],
[['q', None, 'p'], {'p': 240, 'q': 180, 'r': 240}]),
('normal control 7',
[{'q': [0, 1, 660], 's': [120, 2, 480], 'r': [120, 3, 480], 'p': [0, 4, 480]}, [[120, ['q']]]],
[['p'], {'p': 120, 'q': 0, 'r': 120, 's': 120}]),
('normal control 8',
[{'q': [120, 1, 0], 'r': [0, 2, 660], 's': [120, 3, 480], 'p': [120, 4, 0]},
[[240, []], [120, ['q', 'r']]]],
[['q', 's'], {'p': 120, 'q': 360, 'r': 0, 's': 240}])],
[('regression: daily minutes credit 1',
[{'q': [0, 1, 480], 'p': [120, 2, 660]}, [[240, []], [240, ['q', 'p']]]],
[['q', None], {'p': 120, 'q': 240}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'r': [120, 2, 600], 'p': [60, 3, 600], 's': [240, 4, 660]},
[[120, ['r', 'q']], [120, ['q', 'p']], [60, ['p']], [60, ['r', 'q']]]],
[['p', 'r', 'q', 's'], {'p': 180, 'q': 300, 'r': 240, 's': 300}]),
('partial repair guard 3',
[{'r': [0, 1, 480], 'p': [120, 2, 480], 'q': [0, 3, 480]},
[[240, []], [60, ['p']], [120, ['r', 'q']], [120, ['p', 'q']]]],
[['r', 'q', 'p', None], {'p': 360, 'q': 300, 'r': 240}]),
('normal control 4',
[{'r': [240, 1, 480], 'q': [120, 2, 0], 'p': [240, 3, 480], 's': [240, 4, 600]},
[[120, []], [240, ['r', 's']], [60, []], [120, ['r']]]],
[['q', 'q', 'p', 's'], {'p': 300, 'q': 480, 'r': 480, 's': 360}]),
('normal control 5',
[{'q': [120, 1, 600], 'r': [60, 2, 240], 'p': [60, 3, 0], 's': [240, 4, 660]},
[[120, []], [60, ['q']], [240, ['s', 'q']], [120, ['p', 's']]]],
[['r', 'p', 'p', 'q'], {'p': 360, 'q': 240, 'r': 180, 's': 240}]),
('normal control 6',
[{'p': [120, 1, 660], 'q': [120, 2, 660], 'r': [120, 3, 240], 's': [120, 4, 0]},
[[60, ['r']], [60, ['p', 'r']], [60, []], [240, []]]],
[['p', 'q', 'r', 's'], {'p': 180, 'q': 180, 'r': 180, 's': 360}]),
('normal control 7',
[{'q': [0, 1, 0], 's': [60, 2, 660], 'p': [60, 3, 0], 'r': [240, 4, 660]},
[[240, []], [240, []], [120, ['r']], [120, ['s']]]],
[['q', 'p', 'q', 'p'], {'p': 420, 'q': 360, 'r': 240, 's': 60}]),
('normal control 8', [{'q': [240, 1, 480], 'p': [60, 2, 240]}, [[60, []], [60, ['q', 'p']]]],
[['p', None], {'p': 180, 'q': 300}])],
[('regression: daily minutes credit 1',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('regression variant: daily minutes credit 2',
[{'p': [240, 1, 240], 'r': [240, 2, 240], 'q': [0, 3, 480]},
[[120, []], [120, ['p']], [60, ['p']], [60, ['r']]]],
[['q', 'q', 'r', 'p'], {'p': 360, 'q': 240, 'r': 300}]),
('partial repair guard 3',
[{'p': [0, 1, 0], 'r': [0, 2, 600], 'q': [240, 3, 0]}, [[240, ['q', 'r']], [60, []], [60, []], [60, []]]],
[['p', 'r', 'r', 'p'], {'p': 300, 'q': 240, 'r': 120}]),
('normal control 4',
[{'p': [0, 1, 600], 'r': [120, 2, 240], 'q': [0, 3, 480]}, [[240, []], [240, ['p']], [60, []]]],
[['q', 'r', 'p'], {'p': 60, 'q': 240, 'r': 360}]),
('normal control 5',
[{'p': [120, 1, 0], 'q': [120, 2, 240]}, [[60, []], [120, []], [120, ['q', 'p']], [240, ['q', 'p']]]],
[['p', 'q', None, None], {'p': 540, 'q': 600}]),
('normal control 6',
[{'r': [60, 1, 480], 'q': [60, 2, 660], 'p': [240, 3, 600]}, [[240, ['r']], [120, []]]],
[[None, 'p'], {'p': 360, 'q': 60, 'r': 300}]),
('normal control 7', [{'q': [0, 1, 240], 'r': [120, 2, 660], 'p': [120, 3, 0]}, [[60, []]]],
[['q'], {'p': 120, 'q': 60, 'r': 120}]),
('normal control 8', [{'q': [120, 1, 600], 'p': [60, 2, 0]}, [[60, []], [240, []]]],
[['p', 'p'], {'p': 360, 'q': 120}])]]
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: daily minutes credit 1 | [['r', 's'], {'p': 120, 'q': 300, 'r': 300, 's': 300}] | [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}] | Failed |
| regression variant: daily minutes credit 2 | [['p', None], {'p': 120, 'q': 120}] | [['p', None], {'p': 60, 'q': 120}] | Failed |
| partial repair guard 3 | [['p', None, 'q', None], {'p': 120, 'q': 660}] | [['p', None, 'q', None], {'p': 60, 'q': 420}] | Failed |
| normal control 4 | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | Passed |
| normal control 5 | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | Passed |
| normal control 6 | [['p', None, 'p', 'q'], {'p': 720, 'q': 120}] | [['p', None, None, 'q'], {'p': 240, 'q': 120}] | Failed |
| normal control 7 | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | Passed |
| normal control 8 | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}] | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}] | Passed |
SHA-256 / fd7bd0ef6a3db4793cfde88f9b2905314970b27b9d5082b262b43b52e8da3461
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(ledger, offers):
led = {w: list(v) for w, v in ledger.items()}
result = []
for minutes, refusers in offers:
cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
taker = None
for w in cands:
if led[w][2] + minutes > 720:
continue
if w in refusers:
led[w][0] += minutes
continue
taker = w
break
if taker is not None:
led[taker][0] += minutes
led[taker][2] = minutes
result.append(taker)
return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: daily minutes credit 1',
[{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
[[60, []], [240, ['q', 'r']]]],
[['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'p': [0, 2, 660]}, [[60, ['q']], [60, ['q', 'p']]]],
[['p', None], {'p': 60, 'q': 120}]),
('partial repair guard 3',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('normal control 4',
[{'q': [120, 1, 480], 'r': [120, 2, 480], 'p': [120, 3, 240]},
[[240, ['q']], [60, ['q', 'r']], [60, ['q']], [240, ['q']]]],
[['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}]),
('normal control 5',
[{'r': [240, 1, 480], 'p': [240, 2, 480], 'q': [120, 3, 480]}, [[120, ['p']], [60, ['p']]]],
[['q', 'r'], {'p': 240, 'q': 240, 'r': 300}]),
('normal control 6',
[{'p': [0, 1, 480], 'q': [60, 2, 600]}, [[240, []], [240, ['p', 'q']], [240, []], [60, []]]],
[['p', None, None, 'q'], {'p': 240, 'q': 120}]),
('normal control 7',
[{'r': [120, 1, 480], 'p': [240, 2, 0], 'q': [0, 3, 240], 's': [60, 4, 240]}, [[60, []]]],
[['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}]),
('normal control 8',
[{'r': [120, 1, 660], 'q': [120, 2, 240], 'p': [120, 3, 0]}, [[240, ['p']], [60, []], [240, ['r', 'p']]]],
[['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}])],
[('regression: daily minutes credit 1',
[{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
[[None, 'q', None, None], {'p': 240, 'q': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'r': [0, 2, 0], 's': [0, 3, 240], 'p': [60, 4, 600]},
[[240, []], [240, ['s']], [60, ['r']], [120, ['r', 's']]]],
[['r', 'r', 'q', 'p'], {'p': 180, 'q': 60, 'r': 480, 's': 240}]),
('partial repair guard 3',
[{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
[[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
[['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
('normal control 4', [{'q': [120, 1, 660], 'p': [240, 2, 0]}, [[60, []]]], [['q'], {'p': 240, 'q': 180}]),
('normal control 5', [{'p': [120, 1, 600], 'q': [120, 2, 480]}, [[120, []], [240, ['q']], [240, []]]],
[['p', None, 'q'], {'p': 240, 'q': 600}]),
('normal control 6',
[{'q': [120, 1, 600], 'r': [0, 2, 660], 'p': [60, 3, 0]}, [[60, ['p']], [60, ['q']], [120, ['q', 'r']]]],
[['r', 'p', 'p'], {'p': 240, 'q': 240, 'r': 60}]),
('normal control 7',
[{'q': [240, 1, 0], 'p': [120, 2, 660]}, [[240, []], [240, []], [240, ['q']], [60, ['p', 'q']]]],
[['q', 'q', None, None], {'p': 180, 'q': 1020}]),
('normal control 8', [{'r': [0, 1, 0], 'p': [120, 2, 240], 'q': [60, 3, 600]}, [[240, []]]],
[['r'], {'p': 120, 'q': 60, 'r': 240}])],
[('regression: daily minutes credit 1',
[{'p': [120, 1, 0], 'q': [120, 2, 600], 'r': [120, 3, 480]},
[[240, ['q']], [240, ['p']], [240, []], [240, ['q', 'p']]]],
[['p', 'r', 'p', None], {'p': 840, 'q': 120, 'r': 360}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [120, ['p', 'q']], [240, ['q', 'p']], [60, ['q']]]],
[['q', None, None, 'p'], {'p': 660, 'q': 240}]),
('partial repair guard 3',
[{'q': [120, 1, 600], 'p': [0, 2, 600]}, [[120, []], [240, ['p', 'q']], [60, ['q', 'p']], [120, ['q']]]],
[['p', None, None, None], {'p': 120, 'q': 300}]),
('normal control 4',
[{'q': [240, 1, 240], 'p': [120, 2, 660], 'r': [60, 3, 660], 's': [0, 4, 480]}, [[240, ['q']]]],
[['s'], {'p': 120, 'q': 240, 'r': 60, 's': 240}]),
('normal control 5',
[{'q': [120, 1, 240], 's': [240, 2, 600], 'r': [0, 3, 240], 'p': [0, 4, 480]}, [[240, ['r']]]],
[['p'], {'p': 240, 'q': 120, 'r': 240, 's': 240}]),
('normal control 6',
[{'r': [240, 1, 660], 'p': [60, 2, 600], 'q': [60, 3, 480]}, [[120, ['p']], [240, ['r']], [60, []]]],
[['q', None, 'p'], {'p': 240, 'q': 180, 'r': 240}]),
('normal control 7',
[{'q': [0, 1, 660], 's': [120, 2, 480], 'r': [120, 3, 480], 'p': [0, 4, 480]}, [[120, ['q']]]],
[['p'], {'p': 120, 'q': 0, 'r': 120, 's': 120}]),
('normal control 8',
[{'q': [120, 1, 0], 'r': [0, 2, 660], 's': [120, 3, 480], 'p': [120, 4, 0]},
[[240, []], [120, ['q', 'r']]]],
[['q', 's'], {'p': 120, 'q': 360, 'r': 0, 's': 240}])],
[('regression: daily minutes credit 1',
[{'q': [0, 1, 480], 'p': [120, 2, 660]}, [[240, []], [240, ['q', 'p']]]],
[['q', None], {'p': 120, 'q': 240}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'r': [120, 2, 600], 'p': [60, 3, 600], 's': [240, 4, 660]},
[[120, ['r', 'q']], [120, ['q', 'p']], [60, ['p']], [60, ['r', 'q']]]],
[['p', 'r', 'q', 's'], {'p': 180, 'q': 300, 'r': 240, 's': 300}]),
('partial repair guard 3',
[{'r': [0, 1, 480], 'p': [120, 2, 480], 'q': [0, 3, 480]},
[[240, []], [60, ['p']], [120, ['r', 'q']], [120, ['p', 'q']]]],
[['r', 'q', 'p', None], {'p': 360, 'q': 300, 'r': 240}]),
('normal control 4',
[{'r': [240, 1, 480], 'q': [120, 2, 0], 'p': [240, 3, 480], 's': [240, 4, 600]},
[[120, []], [240, ['r', 's']], [60, []], [120, ['r']]]],
[['q', 'q', 'p', 's'], {'p': 300, 'q': 480, 'r': 480, 's': 360}]),
('normal control 5',
[{'q': [120, 1, 600], 'r': [60, 2, 240], 'p': [60, 3, 0], 's': [240, 4, 660]},
[[120, []], [60, ['q']], [240, ['s', 'q']], [120, ['p', 's']]]],
[['r', 'p', 'p', 'q'], {'p': 360, 'q': 240, 'r': 180, 's': 240}]),
('normal control 6',
[{'p': [120, 1, 660], 'q': [120, 2, 660], 'r': [120, 3, 240], 's': [120, 4, 0]},
[[60, ['r']], [60, ['p', 'r']], [60, []], [240, []]]],
[['p', 'q', 'r', 's'], {'p': 180, 'q': 180, 'r': 180, 's': 360}]),
('normal control 7',
[{'q': [0, 1, 0], 's': [60, 2, 660], 'p': [60, 3, 0], 'r': [240, 4, 660]},
[[240, []], [240, []], [120, ['r']], [120, ['s']]]],
[['q', 'p', 'q', 'p'], {'p': 420, 'q': 360, 'r': 240, 's': 60}]),
('normal control 8', [{'q': [240, 1, 480], 'p': [60, 2, 240]}, [[60, []], [60, ['q', 'p']]]],
[['p', None], {'p': 180, 'q': 300}])],
[('regression: daily minutes credit 1',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('regression variant: daily minutes credit 2',
[{'p': [240, 1, 240], 'r': [240, 2, 240], 'q': [0, 3, 480]},
[[120, []], [120, ['p']], [60, ['p']], [60, ['r']]]],
[['q', 'q', 'r', 'p'], {'p': 360, 'q': 240, 'r': 300}]),
('partial repair guard 3',
[{'p': [0, 1, 0], 'r': [0, 2, 600], 'q': [240, 3, 0]}, [[240, ['q', 'r']], [60, []], [60, []], [60, []]]],
[['p', 'r', 'r', 'p'], {'p': 300, 'q': 240, 'r': 120}]),
('normal control 4',
[{'p': [0, 1, 600], 'r': [120, 2, 240], 'q': [0, 3, 480]}, [[240, []], [240, ['p']], [60, []]]],
[['q', 'r', 'p'], {'p': 60, 'q': 240, 'r': 360}]),
('normal control 5',
[{'p': [120, 1, 0], 'q': [120, 2, 240]}, [[60, []], [120, []], [120, ['q', 'p']], [240, ['q', 'p']]]],
[['p', 'q', None, None], {'p': 540, 'q': 600}]),
('normal control 6',
[{'r': [60, 1, 480], 'q': [60, 2, 660], 'p': [240, 3, 600]}, [[240, ['r']], [120, []]]],
[[None, 'p'], {'p': 360, 'q': 60, 'r': 300}]),
('normal control 7', [{'q': [0, 1, 240], 'r': [120, 2, 660], 'p': [120, 3, 0]}, [[60, []]]],
[['q'], {'p': 120, 'q': 60, 'r': 120}]),
('normal control 8', [{'q': [120, 1, 600], 'p': [60, 2, 0]}, [[60, []], [240, []]]],
[['p', 'p'], {'p': 360, 'q': 120}])]]
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: daily minutes credit 1 | [['r', 's'], {'p': 120, 'q': 300, 'r': 300, 's': 300}] | [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}] | Failed |
| regression variant: daily minutes credit 2 | [['p', None], {'p': 120, 'q': 120}] | [['p', None], {'p': 60, 'q': 120}] | Failed |
| partial repair guard 3 | [['p', None, 'p', 'p'], {'p': 600, 'q': 420}] | [['p', None, 'q', None], {'p': 60, 'q': 420}] | Failed |
| normal control 4 | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | Passed |
| normal control 5 | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | Passed |
| normal control 6 | [['p', None, 'p', 'q'], {'p': 720, 'q': 120}] | [['p', None, None, 'q'], {'p': 240, 'q': 120}] | Failed |
| normal control 7 | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | Passed |
| normal control 8 | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 420}] | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}] | Failed |
SHA-256 / e8f13c1a555228c6aca7a4e556b63ce51cf746890113fcfcb2f7e71bbd44d77a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(ledger, offers):
led = {w: list(v) for w, v in ledger.items()}
result = []
for minutes, refusers in offers:
cands = sorted(led, key=lambda w: (led[w][0], led[w][1]))
taker = None
for w in cands:
if led[w][2] + minutes > 720:
continue
if w in refusers:
led[w][0] += minutes
continue
taker = w
break
if taker is not None:
led[taker][0] += minutes
led[taker][2] += minutes
result.append(taker)
return [result, {w: led[w][0] for w in sorted(led)}]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: daily minutes credit 1',
[{'p': [120, 1, 240], 'r': [0, 2, 480], 'q': [60, 3, 240], 's': [60, 4, 480]},
[[60, []], [240, ['q', 'r']]]],
[['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'p': [0, 2, 660]}, [[60, ['q']], [60, ['q', 'p']]]],
[['p', None], {'p': 60, 'q': 120}]),
('partial repair guard 3',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('normal control 4',
[{'q': [120, 1, 480], 'r': [120, 2, 480], 'p': [120, 3, 240]},
[[240, ['q']], [60, ['q', 'r']], [60, ['q']], [240, ['q']]]],
[['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}]),
('normal control 5',
[{'r': [240, 1, 480], 'p': [240, 2, 480], 'q': [120, 3, 480]}, [[120, ['p']], [60, ['p']]]],
[['q', 'r'], {'p': 240, 'q': 240, 'r': 300}]),
('normal control 6',
[{'p': [0, 1, 480], 'q': [60, 2, 600]}, [[240, []], [240, ['p', 'q']], [240, []], [60, []]]],
[['p', None, None, 'q'], {'p': 240, 'q': 120}]),
('normal control 7',
[{'r': [120, 1, 480], 'p': [240, 2, 0], 'q': [0, 3, 240], 's': [60, 4, 240]}, [[60, []]]],
[['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}]),
('normal control 8',
[{'r': [120, 1, 660], 'q': [120, 2, 240], 'p': [120, 3, 0]}, [[240, ['p']], [60, []], [240, ['r', 'p']]]],
[['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}])],
[('regression: daily minutes credit 1',
[{'q': [120, 1, 600], 'p': [240, 2, 660]}, [[120, ['q']], [60, []], [120, []], [240, []]]],
[[None, 'q', None, None], {'p': 240, 'q': 300}]),
('regression variant: daily minutes credit 2',
[{'q': [0, 1, 600], 'r': [0, 2, 0], 's': [0, 3, 240], 'p': [60, 4, 600]},
[[240, []], [240, ['s']], [60, ['r']], [120, ['r', 's']]]],
[['r', 'r', 'q', 'p'], {'p': 180, 'q': 60, 'r': 480, 's': 240}]),
('partial repair guard 3',
[{'r': [0, 1, 600], 'p': [120, 2, 660], 'q': [0, 3, 660]},
[[60, ['p', 'r']], [120, ['p', 'r']], [60, ['r', 'p']]]],
[['q', None, None], {'p': 180, 'q': 60, 'r': 240}]),
('normal control 4', [{'q': [120, 1, 660], 'p': [240, 2, 0]}, [[60, []]]], [['q'], {'p': 240, 'q': 180}]),
('normal control 5', [{'p': [120, 1, 600], 'q': [120, 2, 480]}, [[120, []], [240, ['q']], [240, []]]],
[['p', None, 'q'], {'p': 240, 'q': 600}]),
('normal control 6',
[{'q': [120, 1, 600], 'r': [0, 2, 660], 'p': [60, 3, 0]}, [[60, ['p']], [60, ['q']], [120, ['q', 'r']]]],
[['r', 'p', 'p'], {'p': 240, 'q': 240, 'r': 60}]),
('normal control 7',
[{'q': [240, 1, 0], 'p': [120, 2, 660]}, [[240, []], [240, []], [240, ['q']], [60, ['p', 'q']]]],
[['q', 'q', None, None], {'p': 180, 'q': 1020}]),
('normal control 8', [{'r': [0, 1, 0], 'p': [120, 2, 240], 'q': [60, 3, 600]}, [[240, []]]],
[['r'], {'p': 120, 'q': 60, 'r': 240}])],
[('regression: daily minutes credit 1',
[{'p': [120, 1, 0], 'q': [120, 2, 600], 'r': [120, 3, 480]},
[[240, ['q']], [240, ['p']], [240, []], [240, ['q', 'p']]]],
[['p', 'r', 'p', None], {'p': 840, 'q': 120, 'r': 360}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'p': [240, 2, 0]}, [[120, []], [120, ['p', 'q']], [240, ['q', 'p']], [60, ['q']]]],
[['q', None, None, 'p'], {'p': 660, 'q': 240}]),
('partial repair guard 3',
[{'q': [120, 1, 600], 'p': [0, 2, 600]}, [[120, []], [240, ['p', 'q']], [60, ['q', 'p']], [120, ['q']]]],
[['p', None, None, None], {'p': 120, 'q': 300}]),
('normal control 4',
[{'q': [240, 1, 240], 'p': [120, 2, 660], 'r': [60, 3, 660], 's': [0, 4, 480]}, [[240, ['q']]]],
[['s'], {'p': 120, 'q': 240, 'r': 60, 's': 240}]),
('normal control 5',
[{'q': [120, 1, 240], 's': [240, 2, 600], 'r': [0, 3, 240], 'p': [0, 4, 480]}, [[240, ['r']]]],
[['p'], {'p': 240, 'q': 120, 'r': 240, 's': 240}]),
('normal control 6',
[{'r': [240, 1, 660], 'p': [60, 2, 600], 'q': [60, 3, 480]}, [[120, ['p']], [240, ['r']], [60, []]]],
[['q', None, 'p'], {'p': 240, 'q': 180, 'r': 240}]),
('normal control 7',
[{'q': [0, 1, 660], 's': [120, 2, 480], 'r': [120, 3, 480], 'p': [0, 4, 480]}, [[120, ['q']]]],
[['p'], {'p': 120, 'q': 0, 'r': 120, 's': 120}]),
('normal control 8',
[{'q': [120, 1, 0], 'r': [0, 2, 660], 's': [120, 3, 480], 'p': [120, 4, 0]},
[[240, []], [120, ['q', 'r']]]],
[['q', 's'], {'p': 120, 'q': 360, 'r': 0, 's': 240}])],
[('regression: daily minutes credit 1',
[{'q': [0, 1, 480], 'p': [120, 2, 660]}, [[240, []], [240, ['q', 'p']]]],
[['q', None], {'p': 120, 'q': 240}]),
('regression variant: daily minutes credit 2',
[{'q': [120, 1, 600], 'r': [120, 2, 600], 'p': [60, 3, 600], 's': [240, 4, 660]},
[[120, ['r', 'q']], [120, ['q', 'p']], [60, ['p']], [60, ['r', 'q']]]],
[['p', 'r', 'q', 's'], {'p': 180, 'q': 300, 'r': 240, 's': 300}]),
('partial repair guard 3',
[{'r': [0, 1, 480], 'p': [120, 2, 480], 'q': [0, 3, 480]},
[[240, []], [60, ['p']], [120, ['r', 'q']], [120, ['p', 'q']]]],
[['r', 'q', 'p', None], {'p': 360, 'q': 300, 'r': 240}]),
('normal control 4',
[{'r': [240, 1, 480], 'q': [120, 2, 0], 'p': [240, 3, 480], 's': [240, 4, 600]},
[[120, []], [240, ['r', 's']], [60, []], [120, ['r']]]],
[['q', 'q', 'p', 's'], {'p': 300, 'q': 480, 'r': 480, 's': 360}]),
('normal control 5',
[{'q': [120, 1, 600], 'r': [60, 2, 240], 'p': [60, 3, 0], 's': [240, 4, 660]},
[[120, []], [60, ['q']], [240, ['s', 'q']], [120, ['p', 's']]]],
[['r', 'p', 'p', 'q'], {'p': 360, 'q': 240, 'r': 180, 's': 240}]),
('normal control 6',
[{'p': [120, 1, 660], 'q': [120, 2, 660], 'r': [120, 3, 240], 's': [120, 4, 0]},
[[60, ['r']], [60, ['p', 'r']], [60, []], [240, []]]],
[['p', 'q', 'r', 's'], {'p': 180, 'q': 180, 'r': 180, 's': 360}]),
('normal control 7',
[{'q': [0, 1, 0], 's': [60, 2, 660], 'p': [60, 3, 0], 'r': [240, 4, 660]},
[[240, []], [240, []], [120, ['r']], [120, ['s']]]],
[['q', 'p', 'q', 'p'], {'p': 420, 'q': 360, 'r': 240, 's': 60}]),
('normal control 8', [{'q': [240, 1, 480], 'p': [60, 2, 240]}, [[60, []], [60, ['q', 'p']]]],
[['p', None], {'p': 180, 'q': 300}])],
[('regression: daily minutes credit 1',
[{'p': [0, 1, 660], 'q': [120, 2, 480]}, [[60, []], [60, ['p', 'q']], [240, []], [240, ['q']]]],
[['p', None, 'q', None], {'p': 60, 'q': 420}]),
('regression variant: daily minutes credit 2',
[{'p': [240, 1, 240], 'r': [240, 2, 240], 'q': [0, 3, 480]},
[[120, []], [120, ['p']], [60, ['p']], [60, ['r']]]],
[['q', 'q', 'r', 'p'], {'p': 360, 'q': 240, 'r': 300}]),
('partial repair guard 3',
[{'p': [0, 1, 0], 'r': [0, 2, 600], 'q': [240, 3, 0]}, [[240, ['q', 'r']], [60, []], [60, []], [60, []]]],
[['p', 'r', 'r', 'p'], {'p': 300, 'q': 240, 'r': 120}]),
('normal control 4',
[{'p': [0, 1, 600], 'r': [120, 2, 240], 'q': [0, 3, 480]}, [[240, []], [240, ['p']], [60, []]]],
[['q', 'r', 'p'], {'p': 60, 'q': 240, 'r': 360}]),
('normal control 5',
[{'p': [120, 1, 0], 'q': [120, 2, 240]}, [[60, []], [120, []], [120, ['q', 'p']], [240, ['q', 'p']]]],
[['p', 'q', None, None], {'p': 540, 'q': 600}]),
('normal control 6',
[{'r': [60, 1, 480], 'q': [60, 2, 660], 'p': [240, 3, 600]}, [[240, ['r']], [120, []]]],
[[None, 'p'], {'p': 360, 'q': 60, 'r': 300}]),
('normal control 7', [{'q': [0, 1, 240], 'r': [120, 2, 660], 'p': [120, 3, 0]}, [[60, []]]],
[['q'], {'p': 120, 'q': 60, 'r': 120}]),
('normal control 8', [{'q': [120, 1, 600], 'p': [60, 2, 0]}, [[60, []], [240, []]]],
[['p', 'p'], {'p': 360, 'q': 120}])]]
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: daily minutes credit 1 | [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}] | [['r', 's'], {'p': 120, 'q': 300, 'r': 60, 's': 300}] | Passed |
| regression variant: daily minutes credit 2 | [['p', None], {'p': 60, 'q': 120}] | [['p', None], {'p': 60, 'q': 120}] | Passed |
| partial repair guard 3 | [['p', None, 'q', None], {'p': 60, 'q': 420}] | [['p', None, 'q', None], {'p': 60, 'q': 420}] | Passed |
| normal control 4 | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | [['r', 'p', 'p', 'p'], {'p': 480, 'q': 360, 'r': 360}] | Passed |
| normal control 5 | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | [['q', 'r'], {'p': 240, 'q': 240, 'r': 300}] | Passed |
| normal control 6 | [['p', None, None, 'q'], {'p': 240, 'q': 120}] | [['p', None, None, 'q'], {'p': 240, 'q': 120}] | Passed |
| normal control 7 | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | [['q'], {'p': 240, 'q': 60, 'r': 120, 's': 60}] | Passed |
| normal control 8 | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}] | [['q', 'r', 'q'], {'p': 360, 'q': 600, 'r': 180}] | Passed |
SHA-256 / 6a27c869738adcf5049cc687721f3684b552cc88f6430dd543b5d530f785924b
Verification & scope
Stipulated toy labor rule for a bounded roster model; it is not legal advice and does not claim conformance with any jurisdiction, award, or collective agreement. 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.367118+00:00.
Case digest / 55206c3e1e3a720b8a40709eb59c51135b3b4dc5ad4a6cf45c88fc8d81d5d70e