FAILURE MAP
← Case archive

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.

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

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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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 fixtureActualExpectedOutcome
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