FA-94291 / Shift rostering labor rules / Open access
Back-to-back shifts rejected as overlapping during bidding · case 01
Workers cannot bid for a shift that starts when their held shift ends.
ROOT CAUSE
The overlap test treats touching intervals as overlapping.
VERIFIED REPAIR
Use strict comparisons so touching shifts are compatible.
Unsuccessful approach: Making one side strict still rejects adjacency in the other direction.
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}
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: adjacent shift overlap 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: adjacent shift overlap 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', 200, 2], ['w1', 200, 1]],
{'s0': [960, 1200], 's1': [240, 720], 's2': [480, 720], 's3': [240, 480], 's4': [240, 480]},
{'w0': ['s2', 's3', 's1', 's4', 's0'], 'w1': ['s3', 's1', 's4', 's2', 's0']}],
{'w0': ['s2', 's4'], 'w1': ['s3']}),
('normal control 4',
[[['w0', 100, 3], ['w1', 200, 3]],
{'s0': [960, 1200], 's1': [960, 1200], 's2': [240, 720], 's3': [480, 960], 's4': [0, 480]},
{'w0': ['s0', 's1', 's2', 's4'], 'w1': ['s2', 's1', 's0', 's3', 's4']}],
{'w0': ['s0', 's4'], 'w1': ['s2', 's1']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [720, 1200], 's2': [0, 480], 's3': [720, 960], 's4': [240, 720]},
{'w0': ['s1', 's3', 's4', 's0'], 'w1': ['s0']}],
{'w0': ['s1', 's4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 100, 3], ['w1', 200, 3], ['w2', 300, 1]],
{'s0': [0, 240], 's1': [480, 960], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s1', 's0', 's2'], 'w1': ['s0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['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']}),
('normal control 8',
[[['w0', 300, 1], ['w1', 100, 2], ['w2', 300, 2]],
{'s0': [240, 480], 's1': [240, 480], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s3'], 'w1': ['s1', 's0', 's2'], 'w2': ['s3', 's4', 's0']}],
{'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 1], ['w1', 200, 1], ['w2', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [720, 960],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s2', 's3', 's0', 's4'], 'w1': ['s2', 's0'], 'w2': ['s3', 's2', 's5', 's1', 's4', 's0']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3', 's5']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [720, 1200], 's1': [0, 480], 's2': [240, 720], 's3': [720, 960]},
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1', 's3', 's2']}],
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1']}),
('normal control 5',
[[['w0', 100, 3], ['w1', 300, 2]],
{'s0': [240, 720], 's1': [240, 720], 's2': [720, 960], 's3': [960, 1200], 's4': [0, 240]},
{'w0': ['s2', 's4', 's1', 's3'], 'w1': ['s3', 's4', 's0', 's1']}],
{'w0': ['s2', 's4', 's1'], 'w1': ['s3', 's0']}),
('normal control 6',
[[['w0', 300, 3], ['w1', 100, 2], ['w2', 100, 2]],
{'s0': [960, 1200], 's1': [480, 720], 's2': [240, 720], 's3': [0, 240]},
{'w0': ['s1'], 'w1': ['s1'], 'w2': ['s2', 's1', 's0']}],
{'w0': [], 'w1': ['s1'], 'w2': ['s2', 's0']}),
('normal control 7',
[[['w0', 100, 1], ['w1', 300, 2]],
{'s0': [480, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s2', 's3'], 'w1': ['s2', 's4', 's3', 's1']}],
{'w0': ['s2'], 'w1': ['s4', 's3']}),
('normal control 8',
[[['w0', 100, 2], ['w1', 300, 3], ['w2', 100, 3]],
{'s0': [0, 240], 's1': [240, 720], 's2': [240, 480], 's3': [960, 1440]},
{'w0': ['s1', 's3', 's0', 's2'], 'w1': ['s3', 's1', 's0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s3'], 'w2': ['s0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 100, 2]],
{'s0': [960, 1200],
's1': [720, 960],
's2': [0, 240],
's3': [0, 480],
's4': [960, 1200],
's5': [720, 960]},
{'w0': ['s0', 's3', 's4', 's2', 's1', 's5'],
'w1': ['s1', 's4', 's3', 's5', 's2', 's0'],
'w2': ['s0', 's1', 's3']}],
{'w0': ['s3', 's5'], 'w1': ['s1', 's4'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 300, 2]],
{'s0': [480, 960], 's1': [240, 720], 's2': [240, 720], 's3': [480, 960], 's4': [240, 720]},
{'w0': ['s2', 's4'], 'w1': ['s2'], 'w2': ['s0', 's2', 's1', 's3']}],
{'w0': ['s4'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 5',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 300, 3]],
{'s0': [240, 720], 's1': [0, 240], 's2': [480, 960], 's3': [0, 480], 's4': [960, 1440], 's5': [240, 720]},
{'w0': ['s5', 's1', 's4'], 'w1': ['s0', 's4', 's3'], 'w2': ['s5', 's0', 's2', 's3', 's4']}],
{'w0': ['s5', 's1'], 'w1': ['s0', 's4'], 'w2': ['s2', 's3']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 100, 2]],
{'s0': [960, 1440], 's1': [240, 480], 's2': [240, 720], 's3': [960, 1200]},
{'w0': ['s1', 's0', 's3', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's0', 's2'], 'w3': ['s2', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 3], ['w2', 100, 1]],
{'s0': [0, 240], 's1': [0, 240], 's2': [720, 1200], 's3': [720, 1200]},
{'w0': ['s2', 's1'], 'w1': ['s2', 's0', 's1', 's3'], 'w2': ['s3', 's0', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's0'], 'w2': ['s3']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [480, 960], 's1': [0, 240], 's2': [720, 960], 's3': [0, 480]},
{'w0': ['s3'], 'w1': ['s0', 's2', 's1', 's3']}],
{'w0': ['s3'], 'w1': ['s0']})],
[('regression: adjacent shift overlap 1',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2]],
{'s0': [0, 240], 's1': [240, 480], 's2': [480, 720], 's3': [720, 960], 's4': [960, 1440]},
{'w0': ['s2', 's1', 's3', 's0'],
'w1': ['s1', 's3', 's0', 's4', 's2'],
'w2': ['s0', 's4', 's1', 's3', 's2']}],
{'w0': ['s2', 's3'], 'w1': ['s1'], 'w2': ['s0', 's4']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 300, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 200, 1]],
{'s0': [720, 1200],
's1': [0, 480],
's2': [480, 960],
's3': [960, 1200],
's4': [960, 1200],
's5': [0, 240]},
{'w0': ['s4', 's2', 's0', 's5', 's1'],
'w1': ['s5', 's3', 's4', 's2'],
'w2': ['s2', 's4', 's1', 's3', 's5'],
'w3': ['s2', 's3']}],
{'w0': ['s4'], 'w1': ['s5'], 'w2': ['s2', 's1'], 'w3': ['s3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 200, 3], ['w2', 200, 1]],
{'s0': [480, 960],
's1': [720, 1200],
's2': [240, 720],
's3': [720, 960],
's4': [720, 960],
's5': [960, 1440]},
{'w0': ['s5', 's1', 's4', 's3', 's2'],
'w1': ['s1', 's2', 's0', 's4', 's5'],
'w2': ['s2', 's0', 's4', 's5', 's1', 's3']}],
{'w0': ['s5'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [240, 720], 's3': [240, 480]},
{'w0': ['s2', 's1', 's0'], 'w1': ['s0', 's2', 's3', 's1'], 'w2': ['s0']}],
{'w0': ['s2'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [0, 240], 's2': [0, 240], 's3': [720, 1200]},
{'w0': ['s1', 's2'], 'w1': ['s2', 's1', 's0']}],
{'w0': ['s1'], 'w1': ['s2']}),
('normal control 8',
[[['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']})],
[('regression: adjacent shift overlap 1',
[[['w0', 100, 2], ['w1', 100, 2], ['w2', 200, 2]],
{'s0': [0, 480], 's1': [480, 720], 's2': [240, 480], 's3': [480, 960]},
{'w0': ['s2', 's3', 's1', 's0'], 'w1': ['s3', 's0', 's1'], 'w2': ['s2', 's1', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 720], 's1': [480, 960], 's2': [720, 1200], 's3': [480, 960]},
{'w0': ['s0', 's3', 's2'], 'w1': ['s1', 's3', 's0', 's2'], 'w2': ['s0', 's1', 's3', 's2']}],
{'w0': ['s0', 's2'], 'w1': ['s1'], 'w2': ['s3']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 100, 1], ['w3', 100, 3]],
{'s0': [960, 1440],
's1': [960, 1200],
's2': [240, 720],
's3': [960, 1440],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s1', 's4', 's2', 's5', 's3'],
'w1': ['s4', 's1', 's5', 's0', 's3', 's2'],
'w2': ['s2', 's4', 's0', 's1', 's5', 's3'],
'w3': ['s0', 's3', 's4', 's1', 's5']}],
{'w0': ['s1'], 'w1': ['s4'], 'w2': ['s2'], 'w3': ['s0', 's5']}),
('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', 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']}),
('normal control 6',
[[['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 7',
[[['w0', 200, 1], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [960, 1440], 's3': [960, 1440], 's4': [240, 480]},
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s1', 's0', 's4', 's3']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s0']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 2], ['w2', 200, 1], ['w3', 200, 2]],
{'s0': [240, 480],
's1': [720, 1200],
's2': [720, 960],
's3': [0, 480],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s3', 's5', 's0'], 'w1': ['s3', 's0'], 'w2': ['s5'], 'w3': ['s0', 's3']}],
{'w0': ['s5'], 'w1': ['s3'], 'w2': [], 'w3': ['s0']})]]
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: adjacent shift overlap 1 | {'w0': ['s4', 's2'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Failed |
| regression variant: adjacent shift overlap 2 | {'w0': ['s3'], 'w1': ['s2'], 'w2': [], 'w3': ['s0']} | {'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']} | Failed |
| partial repair guard 3 | {'w0': ['s2', 's0'], 'w1': ['s3']} | {'w0': ['s2', 's4'], 'w1': ['s3']} | Failed |
| normal control 4 | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | Passed |
| normal control 5 | {'w0': ['s1'], 'w1': ['s0']} | {'w0': ['s1', 's4'], 'w1': ['s0']} | Failed |
| normal control 6 | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | Passed |
| normal control 7 | {'w0': ['s0'], 'w1': ['s4', 's3']} | {'w0': ['s0', 's2'], 'w1': ['s4', 's3']} | Failed |
| normal control 8 | {'w0': ['s3'], 'w1': ['s1'], 'w2': ['s4', 's0']} | {'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']} | Failed |
SHA-256 / 4f99bc3ee696f14ef44dddde4fc7dd786522af3c61a7a903ac339a6b97a0a7eb
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}
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: adjacent shift overlap 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: adjacent shift overlap 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', 200, 2], ['w1', 200, 1]],
{'s0': [960, 1200], 's1': [240, 720], 's2': [480, 720], 's3': [240, 480], 's4': [240, 480]},
{'w0': ['s2', 's3', 's1', 's4', 's0'], 'w1': ['s3', 's1', 's4', 's2', 's0']}],
{'w0': ['s2', 's4'], 'w1': ['s3']}),
('normal control 4',
[[['w0', 100, 3], ['w1', 200, 3]],
{'s0': [960, 1200], 's1': [960, 1200], 's2': [240, 720], 's3': [480, 960], 's4': [0, 480]},
{'w0': ['s0', 's1', 's2', 's4'], 'w1': ['s2', 's1', 's0', 's3', 's4']}],
{'w0': ['s0', 's4'], 'w1': ['s2', 's1']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [720, 1200], 's2': [0, 480], 's3': [720, 960], 's4': [240, 720]},
{'w0': ['s1', 's3', 's4', 's0'], 'w1': ['s0']}],
{'w0': ['s1', 's4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 100, 3], ['w1', 200, 3], ['w2', 300, 1]],
{'s0': [0, 240], 's1': [480, 960], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s1', 's0', 's2'], 'w1': ['s0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['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']}),
('normal control 8',
[[['w0', 300, 1], ['w1', 100, 2], ['w2', 300, 2]],
{'s0': [240, 480], 's1': [240, 480], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s3'], 'w1': ['s1', 's0', 's2'], 'w2': ['s3', 's4', 's0']}],
{'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 1], ['w1', 200, 1], ['w2', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [720, 960],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s2', 's3', 's0', 's4'], 'w1': ['s2', 's0'], 'w2': ['s3', 's2', 's5', 's1', 's4', 's0']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3', 's5']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [720, 1200], 's1': [0, 480], 's2': [240, 720], 's3': [720, 960]},
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1', 's3', 's2']}],
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1']}),
('normal control 5',
[[['w0', 100, 3], ['w1', 300, 2]],
{'s0': [240, 720], 's1': [240, 720], 's2': [720, 960], 's3': [960, 1200], 's4': [0, 240]},
{'w0': ['s2', 's4', 's1', 's3'], 'w1': ['s3', 's4', 's0', 's1']}],
{'w0': ['s2', 's4', 's1'], 'w1': ['s3', 's0']}),
('normal control 6',
[[['w0', 300, 3], ['w1', 100, 2], ['w2', 100, 2]],
{'s0': [960, 1200], 's1': [480, 720], 's2': [240, 720], 's3': [0, 240]},
{'w0': ['s1'], 'w1': ['s1'], 'w2': ['s2', 's1', 's0']}],
{'w0': [], 'w1': ['s1'], 'w2': ['s2', 's0']}),
('normal control 7',
[[['w0', 100, 1], ['w1', 300, 2]],
{'s0': [480, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s2', 's3'], 'w1': ['s2', 's4', 's3', 's1']}],
{'w0': ['s2'], 'w1': ['s4', 's3']}),
('normal control 8',
[[['w0', 100, 2], ['w1', 300, 3], ['w2', 100, 3]],
{'s0': [0, 240], 's1': [240, 720], 's2': [240, 480], 's3': [960, 1440]},
{'w0': ['s1', 's3', 's0', 's2'], 'w1': ['s3', 's1', 's0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s3'], 'w2': ['s0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 100, 2]],
{'s0': [960, 1200],
's1': [720, 960],
's2': [0, 240],
's3': [0, 480],
's4': [960, 1200],
's5': [720, 960]},
{'w0': ['s0', 's3', 's4', 's2', 's1', 's5'],
'w1': ['s1', 's4', 's3', 's5', 's2', 's0'],
'w2': ['s0', 's1', 's3']}],
{'w0': ['s3', 's5'], 'w1': ['s1', 's4'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 300, 2]],
{'s0': [480, 960], 's1': [240, 720], 's2': [240, 720], 's3': [480, 960], 's4': [240, 720]},
{'w0': ['s2', 's4'], 'w1': ['s2'], 'w2': ['s0', 's2', 's1', 's3']}],
{'w0': ['s4'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 5',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 300, 3]],
{'s0': [240, 720], 's1': [0, 240], 's2': [480, 960], 's3': [0, 480], 's4': [960, 1440], 's5': [240, 720]},
{'w0': ['s5', 's1', 's4'], 'w1': ['s0', 's4', 's3'], 'w2': ['s5', 's0', 's2', 's3', 's4']}],
{'w0': ['s5', 's1'], 'w1': ['s0', 's4'], 'w2': ['s2', 's3']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 100, 2]],
{'s0': [960, 1440], 's1': [240, 480], 's2': [240, 720], 's3': [960, 1200]},
{'w0': ['s1', 's0', 's3', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's0', 's2'], 'w3': ['s2', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 3], ['w2', 100, 1]],
{'s0': [0, 240], 's1': [0, 240], 's2': [720, 1200], 's3': [720, 1200]},
{'w0': ['s2', 's1'], 'w1': ['s2', 's0', 's1', 's3'], 'w2': ['s3', 's0', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's0'], 'w2': ['s3']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [480, 960], 's1': [0, 240], 's2': [720, 960], 's3': [0, 480]},
{'w0': ['s3'], 'w1': ['s0', 's2', 's1', 's3']}],
{'w0': ['s3'], 'w1': ['s0']})],
[('regression: adjacent shift overlap 1',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2]],
{'s0': [0, 240], 's1': [240, 480], 's2': [480, 720], 's3': [720, 960], 's4': [960, 1440]},
{'w0': ['s2', 's1', 's3', 's0'],
'w1': ['s1', 's3', 's0', 's4', 's2'],
'w2': ['s0', 's4', 's1', 's3', 's2']}],
{'w0': ['s2', 's3'], 'w1': ['s1'], 'w2': ['s0', 's4']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 300, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 200, 1]],
{'s0': [720, 1200],
's1': [0, 480],
's2': [480, 960],
's3': [960, 1200],
's4': [960, 1200],
's5': [0, 240]},
{'w0': ['s4', 's2', 's0', 's5', 's1'],
'w1': ['s5', 's3', 's4', 's2'],
'w2': ['s2', 's4', 's1', 's3', 's5'],
'w3': ['s2', 's3']}],
{'w0': ['s4'], 'w1': ['s5'], 'w2': ['s2', 's1'], 'w3': ['s3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 200, 3], ['w2', 200, 1]],
{'s0': [480, 960],
's1': [720, 1200],
's2': [240, 720],
's3': [720, 960],
's4': [720, 960],
's5': [960, 1440]},
{'w0': ['s5', 's1', 's4', 's3', 's2'],
'w1': ['s1', 's2', 's0', 's4', 's5'],
'w2': ['s2', 's0', 's4', 's5', 's1', 's3']}],
{'w0': ['s5'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [240, 720], 's3': [240, 480]},
{'w0': ['s2', 's1', 's0'], 'w1': ['s0', 's2', 's3', 's1'], 'w2': ['s0']}],
{'w0': ['s2'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [0, 240], 's2': [0, 240], 's3': [720, 1200]},
{'w0': ['s1', 's2'], 'w1': ['s2', 's1', 's0']}],
{'w0': ['s1'], 'w1': ['s2']}),
('normal control 8',
[[['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']})],
[('regression: adjacent shift overlap 1',
[[['w0', 100, 2], ['w1', 100, 2], ['w2', 200, 2]],
{'s0': [0, 480], 's1': [480, 720], 's2': [240, 480], 's3': [480, 960]},
{'w0': ['s2', 's3', 's1', 's0'], 'w1': ['s3', 's0', 's1'], 'w2': ['s2', 's1', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 720], 's1': [480, 960], 's2': [720, 1200], 's3': [480, 960]},
{'w0': ['s0', 's3', 's2'], 'w1': ['s1', 's3', 's0', 's2'], 'w2': ['s0', 's1', 's3', 's2']}],
{'w0': ['s0', 's2'], 'w1': ['s1'], 'w2': ['s3']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 100, 1], ['w3', 100, 3]],
{'s0': [960, 1440],
's1': [960, 1200],
's2': [240, 720],
's3': [960, 1440],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s1', 's4', 's2', 's5', 's3'],
'w1': ['s4', 's1', 's5', 's0', 's3', 's2'],
'w2': ['s2', 's4', 's0', 's1', 's5', 's3'],
'w3': ['s0', 's3', 's4', 's1', 's5']}],
{'w0': ['s1'], 'w1': ['s4'], 'w2': ['s2'], 'w3': ['s0', 's5']}),
('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', 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']}),
('normal control 6',
[[['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 7',
[[['w0', 200, 1], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [960, 1440], 's3': [960, 1440], 's4': [240, 480]},
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s1', 's0', 's4', 's3']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s0']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 2], ['w2', 200, 1], ['w3', 200, 2]],
{'s0': [240, 480],
's1': [720, 1200],
's2': [720, 960],
's3': [0, 480],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s3', 's5', 's0'], 'w1': ['s3', 's0'], 'w2': ['s5'], 'w3': ['s0', 's3']}],
{'w0': ['s5'], 'w1': ['s3'], 'w2': [], 'w3': ['s0']})]]
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: adjacent shift overlap 1 | {'w0': ['s4', 's2'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Failed |
| regression variant: adjacent shift overlap 2 | {'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']} | {'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']} | Passed |
| partial repair guard 3 | {'w0': ['s2', 's0'], 'w1': ['s3']} | {'w0': ['s2', 's4'], 'w1': ['s3']} | Failed |
| normal control 4 | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | Passed |
| normal control 5 | {'w0': ['s1'], 'w1': ['s0']} | {'w0': ['s1', 's4'], 'w1': ['s0']} | Failed |
| normal control 6 | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | Passed |
| normal control 7 | {'w0': ['s0'], 'w1': ['s4', 's3']} | {'w0': ['s0', 's2'], 'w1': ['s4', 's3']} | Failed |
| normal control 8 | {'w0': ['s3'], 'w1': ['s1'], 'w2': ['s4', 's0']} | {'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']} | Failed |
SHA-256 / cd15c888a20895c75abf2af992de10cee4638c7a9359892b762657fac8cc474b
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: adjacent shift overlap 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: adjacent shift overlap 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', 200, 2], ['w1', 200, 1]],
{'s0': [960, 1200], 's1': [240, 720], 's2': [480, 720], 's3': [240, 480], 's4': [240, 480]},
{'w0': ['s2', 's3', 's1', 's4', 's0'], 'w1': ['s3', 's1', 's4', 's2', 's0']}],
{'w0': ['s2', 's4'], 'w1': ['s3']}),
('normal control 4',
[[['w0', 100, 3], ['w1', 200, 3]],
{'s0': [960, 1200], 's1': [960, 1200], 's2': [240, 720], 's3': [480, 960], 's4': [0, 480]},
{'w0': ['s0', 's1', 's2', 's4'], 'w1': ['s2', 's1', 's0', 's3', 's4']}],
{'w0': ['s0', 's4'], 'w1': ['s2', 's1']}),
('normal control 5',
[[['w0', 200, 3], ['w1', 200, 1]],
{'s0': [240, 720], 's1': [720, 1200], 's2': [0, 480], 's3': [720, 960], 's4': [240, 720]},
{'w0': ['s1', 's3', 's4', 's0'], 'w1': ['s0']}],
{'w0': ['s1', 's4'], 'w1': ['s0']}),
('normal control 6',
[[['w0', 100, 3], ['w1', 200, 3], ['w2', 300, 1]],
{'s0': [0, 240], 's1': [480, 960], 's2': [720, 960], 's3': [720, 1200]},
{'w0': ['s1', 's0', 's2'], 'w1': ['s0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['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']}),
('normal control 8',
[[['w0', 300, 1], ['w1', 100, 2], ['w2', 300, 2]],
{'s0': [240, 480], 's1': [240, 480], 's2': [0, 240], 's3': [480, 720], 's4': [720, 960]},
{'w0': ['s3'], 'w1': ['s1', 's0', 's2'], 'w2': ['s3', 's4', 's0']}],
{'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 1], ['w1', 200, 1], ['w2', 100, 2]],
{'s0': [720, 960],
's1': [480, 720],
's2': [720, 960],
's3': [240, 720],
's4': [480, 720],
's5': [720, 1200]},
{'w0': ['s2', 's3', 's0', 's4'], 'w1': ['s2', 's0'], 'w2': ['s3', 's2', 's5', 's1', 's4', 's0']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3', 's5']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [720, 1200], 's1': [0, 480], 's2': [240, 720], 's3': [720, 960]},
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1', 's3', 's2']}],
{'w0': ['s2', 's0'], 'w1': ['s3'], 'w2': ['s1']}),
('normal control 5',
[[['w0', 100, 3], ['w1', 300, 2]],
{'s0': [240, 720], 's1': [240, 720], 's2': [720, 960], 's3': [960, 1200], 's4': [0, 240]},
{'w0': ['s2', 's4', 's1', 's3'], 'w1': ['s3', 's4', 's0', 's1']}],
{'w0': ['s2', 's4', 's1'], 'w1': ['s3', 's0']}),
('normal control 6',
[[['w0', 300, 3], ['w1', 100, 2], ['w2', 100, 2]],
{'s0': [960, 1200], 's1': [480, 720], 's2': [240, 720], 's3': [0, 240]},
{'w0': ['s1'], 'w1': ['s1'], 'w2': ['s2', 's1', 's0']}],
{'w0': [], 'w1': ['s1'], 'w2': ['s2', 's0']}),
('normal control 7',
[[['w0', 100, 1], ['w1', 300, 2]],
{'s0': [480, 720], 's1': [960, 1440], 's2': [240, 480], 's3': [0, 240], 's4': [960, 1200]},
{'w0': ['s2', 's3'], 'w1': ['s2', 's4', 's3', 's1']}],
{'w0': ['s2'], 'w1': ['s4', 's3']}),
('normal control 8',
[[['w0', 100, 2], ['w1', 300, 3], ['w2', 100, 3]],
{'s0': [0, 240], 's1': [240, 720], 's2': [240, 480], 's3': [960, 1440]},
{'w0': ['s1', 's3', 's0', 's2'], 'w1': ['s3', 's1', 's0'], 'w2': ['s0']}],
{'w0': ['s1'], 'w1': ['s3'], 'w2': ['s0']})],
[('regression: adjacent shift overlap 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: adjacent shift overlap 2',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 100, 2]],
{'s0': [960, 1200],
's1': [720, 960],
's2': [0, 240],
's3': [0, 480],
's4': [960, 1200],
's5': [720, 960]},
{'w0': ['s0', 's3', 's4', 's2', 's1', 's5'],
'w1': ['s1', 's4', 's3', 's5', 's2', 's0'],
'w2': ['s0', 's1', 's3']}],
{'w0': ['s3', 's5'], 'w1': ['s1', 's4'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 4',
[[['w0', 300, 3], ['w1', 200, 2], ['w2', 300, 2]],
{'s0': [480, 960], 's1': [240, 720], 's2': [240, 720], 's3': [480, 960], 's4': [240, 720]},
{'w0': ['s2', 's4'], 'w1': ['s2'], 'w2': ['s0', 's2', 's1', 's3']}],
{'w0': ['s4'], 'w1': ['s2'], 'w2': ['s0']}),
('normal control 5',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 300, 3]],
{'s0': [240, 720], 's1': [0, 240], 's2': [480, 960], 's3': [0, 480], 's4': [960, 1440], 's5': [240, 720]},
{'w0': ['s5', 's1', 's4'], 'w1': ['s0', 's4', 's3'], 'w2': ['s5', 's0', 's2', 's3', 's4']}],
{'w0': ['s5', 's1'], 'w1': ['s0', 's4'], 'w2': ['s2', 's3']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 100, 2]],
{'s0': [960, 1440], 's1': [240, 480], 's2': [240, 720], 's3': [960, 1200]},
{'w0': ['s1', 's0', 's3', 's2'], 'w1': ['s2', 's3'], 'w2': ['s3', 's0', 's2'], 'w3': ['s2', 's1']}],
{'w0': ['s0'], 'w1': ['s2'], 'w2': ['s3'], 'w3': ['s1']}),
('normal control 7',
[[['w0', 300, 3], ['w1', 200, 3], ['w2', 100, 1]],
{'s0': [0, 240], 's1': [0, 240], 's2': [720, 1200], 's3': [720, 1200]},
{'w0': ['s2', 's1'], 'w1': ['s2', 's0', 's1', 's3'], 'w2': ['s3', 's0', 's2']}],
{'w0': ['s1'], 'w1': ['s2', 's0'], 'w2': ['s3']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [480, 960], 's1': [0, 240], 's2': [720, 960], 's3': [0, 480]},
{'w0': ['s3'], 'w1': ['s0', 's2', 's1', 's3']}],
{'w0': ['s3'], 'w1': ['s0']})],
[('regression: adjacent shift overlap 1',
[[['w0', 200, 2], ['w1', 200, 1], ['w2', 200, 2]],
{'s0': [0, 240], 's1': [240, 480], 's2': [480, 720], 's3': [720, 960], 's4': [960, 1440]},
{'w0': ['s2', 's1', 's3', 's0'],
'w1': ['s1', 's3', 's0', 's4', 's2'],
'w2': ['s0', 's4', 's1', 's3', 's2']}],
{'w0': ['s2', 's3'], 'w1': ['s1'], 'w2': ['s0', 's4']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [480, 720], 's1': [0, 240], 's2': [720, 1200], 's3': [240, 480]},
{'w0': ['s3', 's1', 's2', 's0'], 'w1': ['s2'], 'w2': ['s0', 's1']}],
{'w0': ['s3', 's1'], 'w1': ['s2'], 'w2': ['s0']}),
('partial repair guard 3',
[[['w0', 300, 2], ['w1', 100, 3], ['w2', 200, 2], ['w3', 200, 1]],
{'s0': [720, 1200],
's1': [0, 480],
's2': [480, 960],
's3': [960, 1200],
's4': [960, 1200],
's5': [0, 240]},
{'w0': ['s4', 's2', 's0', 's5', 's1'],
'w1': ['s5', 's3', 's4', 's2'],
'w2': ['s2', 's4', 's1', 's3', 's5'],
'w3': ['s2', 's3']}],
{'w0': ['s4'], 'w1': ['s5'], 'w2': ['s2', 's1'], 'w3': ['s3']}),
('normal control 4',
[[['w0', 200, 3], ['w1', 200, 3]],
{'s0': [720, 960],
's1': [0, 480],
's2': [960, 1440],
's3': [480, 720],
's4': [960, 1440],
's5': [240, 720]},
{'w0': ['s5', 's2', 's0', 's1', 's3', 's4'], 'w1': ['s2', 's5', 's4', 's0', 's3', 's1']}],
{'w0': ['s5', 's0', 's4'], 'w1': ['s2', 's3', 's1']}),
('normal control 5',
[[['w0', 200, 1], ['w1', 200, 3], ['w2', 200, 1]],
{'s0': [480, 960],
's1': [720, 1200],
's2': [240, 720],
's3': [720, 960],
's4': [720, 960],
's5': [960, 1440]},
{'w0': ['s5', 's1', 's4', 's3', 's2'],
'w1': ['s1', 's2', 's0', 's4', 's5'],
'w2': ['s2', 's0', 's4', 's5', 's1', 's3']}],
{'w0': ['s5'], 'w1': ['s1'], 'w2': ['s2']}),
('normal control 6',
[[['w0', 200, 2], ['w1', 200, 2], ['w2', 200, 3]],
{'s0': [240, 720], 's1': [480, 720], 's2': [240, 720], 's3': [240, 480]},
{'w0': ['s2', 's1', 's0'], 'w1': ['s0', 's2', 's3', 's1'], 'w2': ['s0']}],
{'w0': ['s2'], 'w1': ['s0'], 'w2': []}),
('normal control 7',
[[['w0', 200, 2], ['w1', 200, 1]], {'s0': [720, 960], 's1': [0, 240], 's2': [0, 240], 's3': [720, 1200]},
{'w0': ['s1', 's2'], 'w1': ['s2', 's1', 's0']}],
{'w0': ['s1'], 'w1': ['s2']}),
('normal control 8',
[[['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']})],
[('regression: adjacent shift overlap 1',
[[['w0', 100, 2], ['w1', 100, 2], ['w2', 200, 2]],
{'s0': [0, 480], 's1': [480, 720], 's2': [240, 480], 's3': [480, 960]},
{'w0': ['s2', 's3', 's1', 's0'], 'w1': ['s3', 's0', 's1'], 'w2': ['s2', 's1', 's3', 's0']}],
{'w0': ['s2'], 'w1': ['s3', 's0'], 'w2': ['s1']}),
('regression variant: adjacent shift overlap 2',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 300, 3]],
{'s0': [480, 720], 's1': [480, 960], 's2': [720, 1200], 's3': [480, 960]},
{'w0': ['s0', 's3', 's2'], 'w1': ['s1', 's3', 's0', 's2'], 'w2': ['s0', 's1', 's3', 's2']}],
{'w0': ['s0', 's2'], 'w1': ['s1'], 'w2': ['s3']}),
('partial repair guard 3',
[[['w0', 200, 3], ['w1', 200, 1], ['w2', 100, 1], ['w3', 100, 3]],
{'s0': [960, 1440],
's1': [960, 1200],
's2': [240, 720],
's3': [960, 1440],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s1', 's4', 's2', 's5', 's3'],
'w1': ['s4', 's1', 's5', 's0', 's3', 's2'],
'w2': ['s2', 's4', 's0', 's1', 's5', 's3'],
'w3': ['s0', 's3', 's4', 's1', 's5']}],
{'w0': ['s1'], 'w1': ['s4'], 'w2': ['s2'], 'w3': ['s0', 's5']}),
('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', 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']}),
('normal control 6',
[[['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 7',
[[['w0', 200, 1], ['w1', 200, 1], ['w2', 200, 1]],
{'s0': [0, 480], 's1': [960, 1440], 's2': [960, 1440], 's3': [960, 1440], 's4': [240, 480]},
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s1', 's0', 's4', 's3']}],
{'w0': ['s3'], 'w1': ['s1'], 'w2': ['s0']}),
('normal control 8',
[[['w0', 200, 2], ['w1', 100, 2], ['w2', 200, 1], ['w3', 200, 2]],
{'s0': [240, 480],
's1': [720, 1200],
's2': [720, 960],
's3': [0, 480],
's4': [240, 480],
's5': [480, 960]},
{'w0': ['s3', 's5', 's0'], 'w1': ['s3', 's0'], 'w2': ['s5'], 'w3': ['s0', 's3']}],
{'w0': ['s5'], 'w1': ['s3'], 'w2': [], 'w3': ['s0']})]]
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: adjacent shift overlap 1 | {'w0': ['s4', 's1'], 'w1': ['s3']} | {'w0': ['s4', 's1'], 'w1': ['s3']} | Passed |
| regression variant: adjacent shift overlap 2 | {'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']} | {'w0': ['s3'], 'w1': ['s2', 's1'], 'w2': [], 'w3': ['s0']} | Passed |
| partial repair guard 3 | {'w0': ['s2', 's4'], 'w1': ['s3']} | {'w0': ['s2', 's4'], 'w1': ['s3']} | Passed |
| normal control 4 | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | {'w0': ['s0', 's4'], 'w1': ['s2', 's1']} | Passed |
| normal control 5 | {'w0': ['s1', 's4'], 'w1': ['s0']} | {'w0': ['s1', 's4'], 'w1': ['s0']} | Passed |
| normal control 6 | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | {'w0': ['s1'], 'w1': ['s0'], 'w2': []} | Passed |
| normal control 7 | {'w0': ['s0', 's2'], 'w1': ['s4', 's3']} | {'w0': ['s0', 's2'], 'w1': ['s4', 's3']} | Passed |
| normal control 8 | {'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']} | {'w0': ['s3'], 'w1': ['s1', 's2'], 'w2': ['s4', 's0']} | Passed |
SHA-256 / 6b8eaef095e0537c235eab3ae43f2dc362e29615fdac1b47d54b21a40d810ee6
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:02.982862+00:00.
Case digest / 94038a03d9d878f06ad904dbc6b27c48cd4c41452b983a198f031b827942c7cb