FA-94296 / Shift rostering labor rules / Open access
Bidding stops after a single round · case 01
Workers with capacity left never pick a second shift.
ROOT CAUSE
Only one round of bidding is run.
VERIFIED REPAIR
Repeat rounds until a full round makes no pick.
Unsuccessful approach: A fixed two rounds still stops early for higher caps.
Case contract
workers [id, hire day, max shifts]; shifts id -> [start, end]; prefs id -> ordered shift ids. Bidding rounds repeat until nobody picks: in each round workers in seniority order (earlier hire day, then id) take their first preferred shift that is untaken and does not overlap a shift they already hold (touching is fine), one pick per round, until reaching their maximum. Return worker -> picks in order.
Why this case matters
Seniority bidding is a common contractual roster procedure; each rule change reallocates shifts.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(workers, shifts, prefs):
order = sorted(workers, key=lambda w: (w[1], w[0]))
taken = {}
got = {w[0]: [] for w in workers}
for _round in range(1):
changed = False
for wid, hire, cap in order:
if len(got[wid]) >= cap:
continue
for sid in prefs.get(wid, []):
if sid in taken:
continue
s, e = shifts[sid]
if any(s < shifts[o][1] and shifts[o][0] < e for o in got[wid]):
continue
taken[sid] = wid
got[wid].append(sid)
changed = True
break
return got
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [0, 480], 's2': [0, 240], 's3': [0, 480], 's4': [480, 960], 's5': [240, 720]},
{'w0': ['s4', 's0', 's1', 's3', 's5', 's2'], 'w1': ['s3', 's5', 's0']}],
{'w0': ['s4', 's1'], 'w1': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 100, 3]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s1', 's2', 's3', 's0', 's4'],
'w1': ['s3', 's1', 's2', 's0'],
'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 2]],
{'s0': [480, 720], 's1': [720, 960], 's2': [0, 480], 's3': [960, 1440], 's4': [480, 960]},
{'w0': ['s2', 's3', 's1', 's4'], 'w1': ['s4', 's3', 's2']}],
{'w0': ['s2', 's3', 's1'], 'w1': ['s4']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 3]],
{'s0': [480, 960], 's1': [0, 480], 's2': [960, 1440], 's3': [480, 960], 's4': [960, 1440]},
{'w0': ['s1', 's0', 's3', 's4', 's2'], 'w1': ['s4', 's0', 's2']}],
{'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 300, 1]],
{'s0': [0, 480], 's1': [0, 240], 's2': [480, 720], 's3': [240, 720], 's4': [480, 720]},
{'w0': ['s4', 's3'], 'w1': ['s0', 's4', 's2']}],
{'w0': ['s4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 300, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [960, 1200], 's2': [720, 960]},
{'w0': ['s0', 's2'], 'w1': ['s1', 's2', 's0']}],
{'w0': ['s0'], 'w1': ['s1']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 300, 3], ['w1', 300, 2], ['w2', 200, 2]],
{'s0': [960, 1440], 's1': [720, 1200], 's2': [720, 1200]},
{'w0': ['s1'], 'w1': ['s1', 's0'], 'w2': ['s2']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']})],
[('regression: repeat rounds 1',
[[['w0', 100, 2], ['w1', 200, 1]],
{'s0': [960, 1440], 's1': [0, 480], 's2': [720, 1200], 's3': [0, 240], 's4': [0, 480]},
{'w0': ['s3', 's2', 's4'], 'w1': ['s0', 's3', 's2', 's1']}],
{'w0': ['s3', 's2'], 'w1': ['s0']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 3]],
{'s0': [240, 480], 's1': [0, 480], 's2': [0, 240], 's3': [240, 720], 's4': [960, 1440]},
{'w0': ['s0', 's4', 's3', 's1', 's2'], 'w1': ['s4', 's3']}],
{'w0': ['s0', 's2'], 'w1': ['s4', 's3']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 100, 1]],
{'s0': [720, 1200], 's1': [720, 960], 's2': [0, 480], 's3': [480, 720], 's4': [240, 480]},
{'w0': ['s1', 's4', 's0', 's3'], 'w1': ['s1', 's0', 's4', 's2']}],
{'w0': ['s1', 's4', 's3'], 'w1': ['s0']}),
('normal control 4',
[[['w0', 200, 2], ['w1', 200, 2]],
{'s0': [960, 1440], 's1': [720, 960], 's2': [240, 720], 's3': [480, 720]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s0']}],
{'w0': ['s3', 's1'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 200, 1]],
{'s0': [0, 480], 's1': [720, 960], 's2': [720, 1200], 's3': [480, 720], 's4': [480, 720]},
{'w0': ['s0', 's1', 's3'], 'w1': ['s0', 's2']}],
{'w0': ['s0'], 'w1': ['s2']}),
('normal control 7',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 1], ['w2', 300, 2]],
{'s0': [240, 480],
's1': [960, 1440],
's2': [240, 720],
's3': [960, 1440],
's4': [720, 1200],
's5': [0, 240]},
{'w0': ['s5', 's3', 's2', 's0', 's1', 's4'],
'w1': ['s0', 's1', 's4', 's2', 's3'],
'w2': ['s4', 's1', 's0', 's5']}],
{'w0': ['s5', 's3'], 'w1': ['s0'], 'w2': ['s4']})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 100, 1], ['w1', 200, 3], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 960], 's1': [960, 1440], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s3', 's1'], 'w1': ['s2', 's0', 's1'], 'w2': ['s2'], 'w3': ['s0', 's1', 's3', 's2']}],
{'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 1]],
{'s0': [480, 960],
's1': [240, 480],
's2': [480, 960],
's3': [480, 960],
's4': [480, 960],
's5': [960, 1200]},
{'w0': ['s1', 's5', 's2', 's0'], 'w1': ['s2']}],
{'w0': ['s1', 's5', 's0'], 'w1': ['s2']}),
('normal control 4',
[[['w0', 100, 1], ['w1', 200, 2]],
{'s0': [0, 240],
's1': [720, 1200],
's2': [240, 720],
's3': [240, 720],
's4': [720, 1200],
's5': [0, 480]},
{'w0': ['s3', 's1'], 'w1': ['s0']}],
{'w0': ['s3'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 300, 1], ['w1', 300, 1], ['w2', 200, 1]],
{'s0': [480, 960], 's1': [480, 720], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1', 's2'], 'w1': ['s1', 's0', 's2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 300, 1], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [240, 480]},
{'w0': ['s1'], 'w1': ['s3', 's0', 's2', 's1']}],
{'w0': ['s1'], 'w1': ['s3']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 100, 1], ['w1', 200, 2], ['w2', 200, 2]], {'s0': [720, 1200], 's1': [240, 720], 's2': [0, 480]},
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s2', 's0']}],
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s0']})],
[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 1]],
{'s0': [720, 960], 's1': [960, 1200], 's2': [960, 1440], 's3': [240, 720]},
{'w0': ['s3', 's0', 's2'], 'w1': ['s1', 's2', 's3'], 'w2': ['s0', 's1'], 'w3': ['s0', 's3']}],
{'w0': ['s3', 's2'], 'w1': ['s1'], 'w2': ['s0'], 'w3': []}),
('regression variant: repeat rounds 2',
[[['w0', 100, 2], ['w1', 100, 2]], {'s0': [0, 240], 's1': [240, 720], 's2': [720, 1200], 's3': [0, 240]},
{'w0': ['s2', 's0', 's3'], 'w1': ['s3', 's2', 's1', 's0']}],
{'w0': ['s2', 's0'], 'w1': ['s3', 's1']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 300, 3]],
{'s0': [0, 480], 's1': [240, 720], 's2': [480, 720], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s0', 's1'], 'w1': ['s2', 's0', 's4', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2', 's4', 's3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 100, 3], ['w2', 100, 1], ['w3', 200, 3]],
{'s0': [480, 960], 's1': [240, 480], 's2': [480, 960], 's3': [480, 720], 's4': [240, 720]},
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3', 's0'], 'w3': ['s4', 's3']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3'], 'w3': ['s4']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('normal control 7',
[[['w0', 200, 3], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [960, 1200], 's1': [720, 960], 's2': [960, 1440]},
{'w0': ['s2', 's0', 's1'], 'w1': ['s2'], 'w2': ['s1']}],
{'w0': ['s2'], 'w1': [], 'w2': ['s1']}),
('normal control 8',
[[['w0', 100, 3], ['w1', 200, 1], ['w2', 100, 2], ['w3', 200, 3]],
{'s0': [0, 240], 's1': [960, 1440], 's2': [0, 240], 's3': [0, 480], 's4': [240, 720]},
{'w0': ['s3', 's1', 's4', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's4', 's1', 's2'], 'w3': ['s4', 's2']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s4'], 'w3': []})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [960, 1200], 's2': [960, 1200], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s3'], 'w1': ['s0', 's1', 's3', 's2', 's4'], 'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s3'], 'w1': ['s0', 's2'], 'w2': ['s1']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [720, 960], 's2': [720, 1200], 's3': [960, 1440], 's4': [240, 720]},
{'w0': ['s0', 's2'], 'w1': ['s2', 's3'], 'w2': ['s0', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1', 's3']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [0, 240], 's1': [480, 720], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s0'], 'w1': ['s0', 's3', 's2', 's1'], 'w2': ['s3', 's1']}],
{'w0': [], 'w1': ['s0', 's2', 's1'], 'w2': ['s3']}),
('normal control 4',
[[['w0', 100, 2], ['w1', 200, 3], ['w2', 200, 1], ['w3', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [960, 1440],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s5', 's4', 's2'], 'w1': ['s4', 's0', 's5'], 'w2': ['s4', 's3', 's1', 's5'], 'w3': ['s1', 's3']}],
{'w0': ['s5'], 'w1': ['s4', 's0'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 300, 3], ['w2', 300, 2], ['w3', 200, 2]],
{'s0': [480, 720],
's1': [240, 480],
's2': [720, 1200],
's3': [720, 1200],
's4': [240, 720],
's5': [960, 1200]},
{'w0': ['s5', 's0', 's3'],
'w1': ['s0'],
'w2': ['s5', 's4', 's2', 's1', 's0', 's3'],
'w3': ['s0', 's4', 's5', 's3', 's1']}],
{'w0': ['s5'], 'w1': [], 'w2': ['s4', 's2'], 'w3': ['s0', 's3']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 1]], {'s0': [0, 240], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0', 's1', 's2'], 'w1': ['s2']}],
{'w0': ['s0', 's1'], 'w1': ['s2']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2], ['w3', 200, 2]],
{'s0': [960, 1440], 's1': [480, 720], 's2': [240, 720], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1'], 'w1': ['s3', 's0'], 'w2': ['s3', 's1', 's2', 's0'], 'w3': ['s2', 's3']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s1'], 'w3': ['s2']})]]
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: repeat rounds 1 | {'w0': ['s4'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Failed |
| regression variant: repeat rounds 2 | {'w0': ['s2'], 'w1': ['s3'], 'w2': ['s1']} | {'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']} | Failed |
| partial repair guard 3 | {'w0': ['s2'], 'w1': ['s4']} | {'w0': ['s2', 's3', 's1'], 'w1': ['s4']} | Failed |
| normal control 4 | {'w0': ['s1'], 'w1': ['s4']} | {'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']} | Failed |
| normal control 5 | {'w0': ['s4'], 'w1': ['s0']} | {'w0': ['s4'], 'w1': ['s0']} | Passed |
| normal control 6 | {'w0': ['s0'], 'w1': ['s1']} | {'w0': ['s0'], 'w1': ['s1']} | Passed |
| normal control 7 | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4'], 'w3': ['s1']} | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']} | Failed |
| normal control 8 | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | Passed |
SHA-256 / 807f0029318db4226d655c46e92644ace571d279566402125dd576e3430bb8fd
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(workers, shifts, prefs):
order = sorted(workers, key=lambda w: (w[1], w[0]))
taken = {}
got = {w[0]: [] for w in workers}
for _round in range(2):
changed = False
for wid, hire, cap in order:
if len(got[wid]) >= cap:
continue
for sid in prefs.get(wid, []):
if sid in taken:
continue
s, e = shifts[sid]
if any(s < shifts[o][1] and shifts[o][0] < e for o in got[wid]):
continue
taken[sid] = wid
got[wid].append(sid)
changed = True
break
return got
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [0, 480], 's2': [0, 240], 's3': [0, 480], 's4': [480, 960], 's5': [240, 720]},
{'w0': ['s4', 's0', 's1', 's3', 's5', 's2'], 'w1': ['s3', 's5', 's0']}],
{'w0': ['s4', 's1'], 'w1': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 100, 3]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s1', 's2', 's3', 's0', 's4'],
'w1': ['s3', 's1', 's2', 's0'],
'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 2]],
{'s0': [480, 720], 's1': [720, 960], 's2': [0, 480], 's3': [960, 1440], 's4': [480, 960]},
{'w0': ['s2', 's3', 's1', 's4'], 'w1': ['s4', 's3', 's2']}],
{'w0': ['s2', 's3', 's1'], 'w1': ['s4']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 3]],
{'s0': [480, 960], 's1': [0, 480], 's2': [960, 1440], 's3': [480, 960], 's4': [960, 1440]},
{'w0': ['s1', 's0', 's3', 's4', 's2'], 'w1': ['s4', 's0', 's2']}],
{'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 300, 1]],
{'s0': [0, 480], 's1': [0, 240], 's2': [480, 720], 's3': [240, 720], 's4': [480, 720]},
{'w0': ['s4', 's3'], 'w1': ['s0', 's4', 's2']}],
{'w0': ['s4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 300, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [960, 1200], 's2': [720, 960]},
{'w0': ['s0', 's2'], 'w1': ['s1', 's2', 's0']}],
{'w0': ['s0'], 'w1': ['s1']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 300, 3], ['w1', 300, 2], ['w2', 200, 2]],
{'s0': [960, 1440], 's1': [720, 1200], 's2': [720, 1200]},
{'w0': ['s1'], 'w1': ['s1', 's0'], 'w2': ['s2']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']})],
[('regression: repeat rounds 1',
[[['w0', 100, 2], ['w1', 200, 1]],
{'s0': [960, 1440], 's1': [0, 480], 's2': [720, 1200], 's3': [0, 240], 's4': [0, 480]},
{'w0': ['s3', 's2', 's4'], 'w1': ['s0', 's3', 's2', 's1']}],
{'w0': ['s3', 's2'], 'w1': ['s0']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 3]],
{'s0': [240, 480], 's1': [0, 480], 's2': [0, 240], 's3': [240, 720], 's4': [960, 1440]},
{'w0': ['s0', 's4', 's3', 's1', 's2'], 'w1': ['s4', 's3']}],
{'w0': ['s0', 's2'], 'w1': ['s4', 's3']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 100, 1]],
{'s0': [720, 1200], 's1': [720, 960], 's2': [0, 480], 's3': [480, 720], 's4': [240, 480]},
{'w0': ['s1', 's4', 's0', 's3'], 'w1': ['s1', 's0', 's4', 's2']}],
{'w0': ['s1', 's4', 's3'], 'w1': ['s0']}),
('normal control 4',
[[['w0', 200, 2], ['w1', 200, 2]],
{'s0': [960, 1440], 's1': [720, 960], 's2': [240, 720], 's3': [480, 720]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s0']}],
{'w0': ['s3', 's1'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 200, 1]],
{'s0': [0, 480], 's1': [720, 960], 's2': [720, 1200], 's3': [480, 720], 's4': [480, 720]},
{'w0': ['s0', 's1', 's3'], 'w1': ['s0', 's2']}],
{'w0': ['s0'], 'w1': ['s2']}),
('normal control 7',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 1], ['w2', 300, 2]],
{'s0': [240, 480],
's1': [960, 1440],
's2': [240, 720],
's3': [960, 1440],
's4': [720, 1200],
's5': [0, 240]},
{'w0': ['s5', 's3', 's2', 's0', 's1', 's4'],
'w1': ['s0', 's1', 's4', 's2', 's3'],
'w2': ['s4', 's1', 's0', 's5']}],
{'w0': ['s5', 's3'], 'w1': ['s0'], 'w2': ['s4']})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 100, 1], ['w1', 200, 3], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 960], 's1': [960, 1440], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s3', 's1'], 'w1': ['s2', 's0', 's1'], 'w2': ['s2'], 'w3': ['s0', 's1', 's3', 's2']}],
{'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 1]],
{'s0': [480, 960],
's1': [240, 480],
's2': [480, 960],
's3': [480, 960],
's4': [480, 960],
's5': [960, 1200]},
{'w0': ['s1', 's5', 's2', 's0'], 'w1': ['s2']}],
{'w0': ['s1', 's5', 's0'], 'w1': ['s2']}),
('normal control 4',
[[['w0', 100, 1], ['w1', 200, 2]],
{'s0': [0, 240],
's1': [720, 1200],
's2': [240, 720],
's3': [240, 720],
's4': [720, 1200],
's5': [0, 480]},
{'w0': ['s3', 's1'], 'w1': ['s0']}],
{'w0': ['s3'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 300, 1], ['w1', 300, 1], ['w2', 200, 1]],
{'s0': [480, 960], 's1': [480, 720], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1', 's2'], 'w1': ['s1', 's0', 's2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 300, 1], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [240, 480]},
{'w0': ['s1'], 'w1': ['s3', 's0', 's2', 's1']}],
{'w0': ['s1'], 'w1': ['s3']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 100, 1], ['w1', 200, 2], ['w2', 200, 2]], {'s0': [720, 1200], 's1': [240, 720], 's2': [0, 480]},
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s2', 's0']}],
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s0']})],
[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 1]],
{'s0': [720, 960], 's1': [960, 1200], 's2': [960, 1440], 's3': [240, 720]},
{'w0': ['s3', 's0', 's2'], 'w1': ['s1', 's2', 's3'], 'w2': ['s0', 's1'], 'w3': ['s0', 's3']}],
{'w0': ['s3', 's2'], 'w1': ['s1'], 'w2': ['s0'], 'w3': []}),
('regression variant: repeat rounds 2',
[[['w0', 100, 2], ['w1', 100, 2]], {'s0': [0, 240], 's1': [240, 720], 's2': [720, 1200], 's3': [0, 240]},
{'w0': ['s2', 's0', 's3'], 'w1': ['s3', 's2', 's1', 's0']}],
{'w0': ['s2', 's0'], 'w1': ['s3', 's1']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 300, 3]],
{'s0': [0, 480], 's1': [240, 720], 's2': [480, 720], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s0', 's1'], 'w1': ['s2', 's0', 's4', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2', 's4', 's3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 100, 3], ['w2', 100, 1], ['w3', 200, 3]],
{'s0': [480, 960], 's1': [240, 480], 's2': [480, 960], 's3': [480, 720], 's4': [240, 720]},
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3', 's0'], 'w3': ['s4', 's3']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3'], 'w3': ['s4']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('normal control 7',
[[['w0', 200, 3], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [960, 1200], 's1': [720, 960], 's2': [960, 1440]},
{'w0': ['s2', 's0', 's1'], 'w1': ['s2'], 'w2': ['s1']}],
{'w0': ['s2'], 'w1': [], 'w2': ['s1']}),
('normal control 8',
[[['w0', 100, 3], ['w1', 200, 1], ['w2', 100, 2], ['w3', 200, 3]],
{'s0': [0, 240], 's1': [960, 1440], 's2': [0, 240], 's3': [0, 480], 's4': [240, 720]},
{'w0': ['s3', 's1', 's4', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's4', 's1', 's2'], 'w3': ['s4', 's2']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s4'], 'w3': []})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [960, 1200], 's2': [960, 1200], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s3'], 'w1': ['s0', 's1', 's3', 's2', 's4'], 'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s3'], 'w1': ['s0', 's2'], 'w2': ['s1']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [720, 960], 's2': [720, 1200], 's3': [960, 1440], 's4': [240, 720]},
{'w0': ['s0', 's2'], 'w1': ['s2', 's3'], 'w2': ['s0', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1', 's3']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [0, 240], 's1': [480, 720], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s0'], 'w1': ['s0', 's3', 's2', 's1'], 'w2': ['s3', 's1']}],
{'w0': [], 'w1': ['s0', 's2', 's1'], 'w2': ['s3']}),
('normal control 4',
[[['w0', 100, 2], ['w1', 200, 3], ['w2', 200, 1], ['w3', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [960, 1440],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s5', 's4', 's2'], 'w1': ['s4', 's0', 's5'], 'w2': ['s4', 's3', 's1', 's5'], 'w3': ['s1', 's3']}],
{'w0': ['s5'], 'w1': ['s4', 's0'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 300, 3], ['w2', 300, 2], ['w3', 200, 2]],
{'s0': [480, 720],
's1': [240, 480],
's2': [720, 1200],
's3': [720, 1200],
's4': [240, 720],
's5': [960, 1200]},
{'w0': ['s5', 's0', 's3'],
'w1': ['s0'],
'w2': ['s5', 's4', 's2', 's1', 's0', 's3'],
'w3': ['s0', 's4', 's5', 's3', 's1']}],
{'w0': ['s5'], 'w1': [], 'w2': ['s4', 's2'], 'w3': ['s0', 's3']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 1]], {'s0': [0, 240], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0', 's1', 's2'], 'w1': ['s2']}],
{'w0': ['s0', 's1'], 'w1': ['s2']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2], ['w3', 200, 2]],
{'s0': [960, 1440], 's1': [480, 720], 's2': [240, 720], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1'], 'w1': ['s3', 's0'], 'w2': ['s3', 's1', 's2', 's0'], 'w3': ['s2', 's3']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s1'], 'w3': ['s2']})]]
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: repeat rounds 1 | {'w0': ['s4', 's1'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Passed |
| regression variant: repeat rounds 2 | {'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']} | {'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']} | Passed |
| partial repair guard 3 | {'w0': ['s2', 's3'], 'w1': ['s4']} | {'w0': ['s2', 's3', 's1'], 'w1': ['s4']} | Failed |
| normal control 4 | {'w0': ['s1', 's3'], 'w1': ['s4', 's0']} | {'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']} | Failed |
| normal control 5 | {'w0': ['s4'], 'w1': ['s0']} | {'w0': ['s4'], 'w1': ['s0']} | Passed |
| normal control 6 | {'w0': ['s0'], 'w1': ['s1']} | {'w0': ['s0'], 'w1': ['s1']} | Passed |
| normal control 7 | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']} | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']} | Passed |
| normal control 8 | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | Passed |
SHA-256 / 8ab44609d3f75ffd343e7f52a739222e8e64ef107c460254d1b984defb720368
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(workers, shifts, prefs):
order = sorted(workers, key=lambda w: (w[1], w[0]))
taken = {}
got = {w[0]: [] for w in workers}
changed = True
while changed:
changed = False
for wid, hire, cap in order:
if len(got[wid]) >= cap:
continue
for sid in prefs.get(wid, []):
if sid in taken:
continue
s, e = shifts[sid]
if any(s < shifts[o][1] and shifts[o][0] < e for o in got[wid]):
continue
taken[sid] = wid
got[wid].append(sid)
changed = True
break
return got
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [0, 480], 's2': [0, 240], 's3': [0, 480], 's4': [480, 960], 's5': [240, 720]},
{'w0': ['s4', 's0', 's1', 's3', 's5', 's2'], 'w1': ['s3', 's5', 's0']}],
{'w0': ['s4', 's1'], 'w1': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 100, 3]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s1', 's2', 's3', 's0', 's4'],
'w1': ['s3', 's1', 's2', 's0'],
'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 2]],
{'s0': [480, 720], 's1': [720, 960], 's2': [0, 480], 's3': [960, 1440], 's4': [480, 960]},
{'w0': ['s2', 's3', 's1', 's4'], 'w1': ['s4', 's3', 's2']}],
{'w0': ['s2', 's3', 's1'], 'w1': ['s4']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 3]],
{'s0': [480, 960], 's1': [0, 480], 's2': [960, 1440], 's3': [480, 960], 's4': [960, 1440]},
{'w0': ['s1', 's0', 's3', 's4', 's2'], 'w1': ['s4', 's0', 's2']}],
{'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 300, 1]],
{'s0': [0, 480], 's1': [0, 240], 's2': [480, 720], 's3': [240, 720], 's4': [480, 720]},
{'w0': ['s4', 's3'], 'w1': ['s0', 's4', 's2']}],
{'w0': ['s4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 300, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [960, 1200], 's2': [720, 960]},
{'w0': ['s0', 's2'], 'w1': ['s1', 's2', 's0']}],
{'w0': ['s0'], 'w1': ['s1']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 300, 3], ['w1', 300, 2], ['w2', 200, 2]],
{'s0': [960, 1440], 's1': [720, 1200], 's2': [720, 1200]},
{'w0': ['s1'], 'w1': ['s1', 's0'], 'w2': ['s2']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']})],
[('regression: repeat rounds 1',
[[['w0', 100, 2], ['w1', 200, 1]],
{'s0': [960, 1440], 's1': [0, 480], 's2': [720, 1200], 's3': [0, 240], 's4': [0, 480]},
{'w0': ['s3', 's2', 's4'], 'w1': ['s0', 's3', 's2', 's1']}],
{'w0': ['s3', 's2'], 'w1': ['s0']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 3]],
{'s0': [240, 480], 's1': [0, 480], 's2': [0, 240], 's3': [240, 720], 's4': [960, 1440]},
{'w0': ['s0', 's4', 's3', 's1', 's2'], 'w1': ['s4', 's3']}],
{'w0': ['s0', 's2'], 'w1': ['s4', 's3']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 100, 1]],
{'s0': [720, 1200], 's1': [720, 960], 's2': [0, 480], 's3': [480, 720], 's4': [240, 480]},
{'w0': ['s1', 's4', 's0', 's3'], 'w1': ['s1', 's0', 's4', 's2']}],
{'w0': ['s1', 's4', 's3'], 'w1': ['s0']}),
('normal control 4',
[[['w0', 200, 2], ['w1', 200, 2]],
{'s0': [960, 1440], 's1': [720, 960], 's2': [240, 720], 's3': [480, 720]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s0']}],
{'w0': ['s3', 's1'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 200, 1]],
{'s0': [0, 480], 's1': [720, 960], 's2': [720, 1200], 's3': [480, 720], 's4': [480, 720]},
{'w0': ['s0', 's1', 's3'], 'w1': ['s0', 's2']}],
{'w0': ['s0'], 'w1': ['s2']}),
('normal control 7',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 1], ['w2', 300, 2]],
{'s0': [240, 480],
's1': [960, 1440],
's2': [240, 720],
's3': [960, 1440],
's4': [720, 1200],
's5': [0, 240]},
{'w0': ['s5', 's3', 's2', 's0', 's1', 's4'],
'w1': ['s0', 's1', 's4', 's2', 's3'],
'w2': ['s4', 's1', 's0', 's5']}],
{'w0': ['s5', 's3'], 'w1': ['s0'], 'w2': ['s4']})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('regression variant: repeat rounds 2',
[[['w0', 100, 1], ['w1', 200, 3], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 960], 's1': [960, 1440], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s3', 's1'], 'w1': ['s2', 's0', 's1'], 'w2': ['s2'], 'w3': ['s0', 's1', 's3', 's2']}],
{'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']}),
('partial repair guard 3',
[[['w0', 100, 3], ['w1', 200, 1]],
{'s0': [480, 960],
's1': [240, 480],
's2': [480, 960],
's3': [480, 960],
's4': [480, 960],
's5': [960, 1200]},
{'w0': ['s1', 's5', 's2', 's0'], 'w1': ['s2']}],
{'w0': ['s1', 's5', 's0'], 'w1': ['s2']}),
('normal control 4',
[[['w0', 100, 1], ['w1', 200, 2]],
{'s0': [0, 240],
's1': [720, 1200],
's2': [240, 720],
's3': [240, 720],
's4': [720, 1200],
's5': [0, 480]},
{'w0': ['s3', 's1'], 'w1': ['s0']}],
{'w0': ['s3'], 'w1': ['s0']}),
('normal control 5',
[[['w0', 300, 1], ['w1', 300, 1], ['w2', 200, 1]],
{'s0': [480, 960], 's1': [480, 720], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1', 's2'], 'w1': ['s1', 's0', 's2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 300, 1], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [240, 480]},
{'w0': ['s1'], 'w1': ['s3', 's0', 's2', 's1']}],
{'w0': ['s1'], 'w1': ['s3']}),
('normal control 7',
[[['w0', 100, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [0, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s0'], 'w1': ['s2', 's4', 's0', 's1', 's3'], 'w2': ['s4', 's3'], 'w3': ['s1', 's4']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']}),
('normal control 8',
[[['w0', 100, 1], ['w1', 200, 2], ['w2', 200, 2]], {'s0': [720, 1200], 's1': [240, 720], 's2': [0, 480]},
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s2', 's0']}],
{'w0': ['s1'], 'w1': ['s2'], 'w2': ['s0']})],
[('regression: repeat rounds 1',
[[['w0', 200, 3], ['w1', 300, 1], ['w2', 100, 3], ['w3', 200, 1]],
{'s0': [720, 960], 's1': [960, 1200], 's2': [960, 1440], 's3': [240, 720]},
{'w0': ['s3', 's0', 's2'], 'w1': ['s1', 's2', 's3'], 'w2': ['s0', 's1'], 'w3': ['s0', 's3']}],
{'w0': ['s3', 's2'], 'w1': ['s1'], 'w2': ['s0'], 'w3': []}),
('regression variant: repeat rounds 2',
[[['w0', 100, 2], ['w1', 100, 2]], {'s0': [0, 240], 's1': [240, 720], 's2': [720, 1200], 's3': [0, 240]},
{'w0': ['s2', 's0', 's3'], 'w1': ['s3', 's2', 's1', 's0']}],
{'w0': ['s2', 's0'], 'w1': ['s3', 's1']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 300, 3]],
{'s0': [0, 480], 's1': [240, 720], 's2': [480, 720], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s0', 's1'], 'w1': ['s2', 's0', 's4', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2', 's4', 's3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 100, 1], ['w2', 200, 3], ['w3', 200, 1]],
{'s0': [480, 720], 's1': [240, 720], 's2': [720, 960], 's3': [240, 720]},
{'w0': ['s3', 's2', 's1', 's0'], 'w1': ['s0', 's2'], 'w2': ['s3', 's2'], 'w3': ['s3', 's0', 's1']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s2'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 100, 2], ['w1', 100, 3], ['w2', 100, 1], ['w3', 200, 3]],
{'s0': [480, 960], 's1': [240, 480], 's2': [480, 960], 's3': [480, 720], 's4': [240, 720]},
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3', 's0'], 'w3': ['s4', 's3']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': ['s3'], 'w3': ['s4']}),
('normal control 6',
[[['w0', 200, 1], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [720, 960], 's1': [960, 1440], 's2': [480, 960], 's3': [480, 960], 's4': [960, 1200]},
{'w0': ['s1', 's4', 's2', 's0', 's3'], 'w1': ['s2', 's4', 's0', 's3'], 'w2': ['s3', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's4'], 'w2': ['s3']}),
('normal control 7',
[[['w0', 200, 3], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [960, 1200], 's1': [720, 960], 's2': [960, 1440]},
{'w0': ['s2', 's0', 's1'], 'w1': ['s2'], 'w2': ['s1']}],
{'w0': ['s2'], 'w1': [], 'w2': ['s1']}),
('normal control 8',
[[['w0', 100, 3], ['w1', 200, 1], ['w2', 100, 2], ['w3', 200, 3]],
{'s0': [0, 240], 's1': [960, 1440], 's2': [0, 240], 's3': [0, 480], 's4': [240, 720]},
{'w0': ['s3', 's1', 's4', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's4', 's1', 's2'], 'w3': ['s4', 's2']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s4'], 'w3': []})],
[('regression: repeat rounds 1',
[[['w0', 200, 1], ['w1', 200, 2], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [960, 1200], 's2': [960, 1200], 's3': [0, 480], 's4': [720, 1200]},
{'w0': ['s3'], 'w1': ['s0', 's1', 's3', 's2', 's4'], 'w2': ['s1', 's4', 's2', 's3', 's0']}],
{'w0': ['s3'], 'w1': ['s0', 's2'], 'w2': ['s1']}),
('regression variant: repeat rounds 2',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 960], 's1': [720, 960], 's2': [720, 1200], 's3': [960, 1440], 's4': [240, 720]},
{'w0': ['s0', 's2'], 'w1': ['s2', 's3'], 'w2': ['s0', 's1', 's3']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1', 's3']}),
('partial repair guard 3',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 3]],
{'s0': [0, 240], 's1': [480, 720], 's2': [720, 960], 's3': [480, 960]},
{'w0': ['s0'], 'w1': ['s0', 's3', 's2', 's1'], 'w2': ['s3', 's1']}],
{'w0': [], 'w1': ['s0', 's2', 's1'], 'w2': ['s3']}),
('normal control 4',
[[['w0', 100, 2], ['w1', 200, 3], ['w2', 200, 1], ['w3', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [960, 1440],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s5', 's4', 's2'], 'w1': ['s4', 's0', 's5'], 'w2': ['s4', 's3', 's1', 's5'], 'w3': ['s1', 's3']}],
{'w0': ['s5'], 'w1': ['s4', 's0'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 300, 1], ['w2', 300, 1]], {'s0': [240, 720], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s2', 's0', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s1']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 300, 3], ['w2', 300, 2], ['w3', 200, 2]],
{'s0': [480, 720],
's1': [240, 480],
's2': [720, 1200],
's3': [720, 1200],
's4': [240, 720],
's5': [960, 1200]},
{'w0': ['s5', 's0', 's3'],
'w1': ['s0'],
'w2': ['s5', 's4', 's2', 's1', 's0', 's3'],
'w3': ['s0', 's4', 's5', 's3', 's1']}],
{'w0': ['s5'], 'w1': [], 'w2': ['s4', 's2'], 'w3': ['s0', 's3']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 1]], {'s0': [0, 240], 's1': [960, 1440], 's2': [480, 960]},
{'w0': ['s0', 's1', 's2'], 'w1': ['s2']}],
{'w0': ['s0', 's1'], 'w1': ['s2']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2], ['w3', 200, 2]],
{'s0': [960, 1440], 's1': [480, 720], 's2': [240, 720], 's3': [720, 1200]},
{'w0': ['s3', 's0', 's1'], 'w1': ['s3', 's0'], 'w2': ['s3', 's1', 's2', 's0'], 'w3': ['s2', 's3']}],
{'w0': ['s3'], 'w1': ['s0'], 'w2': ['s1'], 'w3': ['s2']})]]
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: repeat rounds 1 | {'w0': ['s4', 's1'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Passed |
| regression variant: repeat rounds 2 | {'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']} | {'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1', 's4']} | Passed |
| partial repair guard 3 | {'w0': ['s2', 's3', 's1'], 'w1': ['s4']} | {'w0': ['s2', 's3', 's1'], 'w1': ['s4']} | Passed |
| normal control 4 | {'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']} | {'w0': ['s1', 's3', 's2'], 'w1': ['s4', 's0']} | Passed |
| normal control 5 | {'w0': ['s4'], 'w1': ['s0']} | {'w0': ['s4'], 'w1': ['s0']} | Passed |
| normal control 6 | {'w0': ['s0'], 'w1': ['s1']} | {'w0': ['s0'], 'w1': ['s1']} | Passed |
| normal control 7 | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']} | {'w0': ['s0'], 'w1': ['s2'], 'w2': ['s4', 's3'], 'w3': ['s1']} | Passed |
| normal control 8 | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | {'w0': ['s1'], 'w1': ['s0'], 'w2': ['s2']} | Passed |
SHA-256 / c3a2d0e8a5a7d178d02fc5a15556c89f87ed24b7eb83e0e86da3bf139be5fdc5
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.017542+00:00.
Case digest / f2b600b3f1d25ca70eb3a316d70e1645e7c4e2e4c4a6381d75387f9fa4e50e3b