FA-94851 / Warehouse slotting and bin packing / Open access
ABC velocity: slowest movers ranked first · case 01
Slow SKUs receive class A and the top movers fall into C.
ROOT CAUSE
The ranking sorts weekly picks ascending, so cumulative share starts from the slowest movers.
VERIFIED REPAIR
Rank by picks descending with the sku code as tie-break.
Unsuccessful approach: Sorting by sku code alone makes the class depend on the alphabet rather than velocity.
Case contract
Input [[sku, weekly_picks]]. Rank by picks descending then sku ascending. SKUs with equal picks form a tie group whose cumulative prior share is the picks of strictly faster groups. picks 0 -> D (dead stock); prior share < 80% -> A; < 95% -> B; else C. Return [[sku, class]] in input order.
Why this case matters
Velocity classes drive which SKUs are slotted into forward pick areas.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
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 |
|---|---|---|---|
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'A']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Failed |
| generated mix 3 | [['S24', 'A'], ['S10', 'A'], ['S13', 'A'], ['S21', 'A'], ['S27', 'A'], ['S15', 'A'], ['S26', 'A'], ['S09', 'A']] | [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']] | Failed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'A']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Failed |
| all zero | [['a', 'D'], ['b', 'D']] | [['a', 'D'], ['b', 'D']] | Passed |
| input order kept | [['m', 'A'], ['k', 'A'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Failed |
| empty | [] | [] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'A'], ['S10', 'D'], ['S19', 'A'], ['S17', 'A'], ['S16', 'A']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / 89d43f5c45662f6b953c4c400f27ad6301a02e10f455381c1ef4eb39c8ab3841
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: r[0])
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
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 |
|---|---|---|---|
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| generated mix 3 | [['S24', 'B'], ['S10', 'A'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'C'], ['S09', 'A']] | [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']] | Failed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| all zero | [['a', 'D'], ['b', 'D']] | [['a', 'D'], ['b', 'D']] | Passed |
| input order kept | [['m', 'C'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Passed |
| empty | [] | [] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| generated mix 7 | [['S28', 'B'], ['S25', 'A'], ['S14', 'A'], ['S01', 'A'], ['S10', 'D'], ['S19', 'A'], ['S17', 'A'], ['S16', 'A']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Failed |
SHA-256 / b3e88460cd2eb347ade87366e360e9ad3860c8d3dece9ed3c73c0e29b4daef84
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(skus):
total = sum(p for _, p in skus)
order = sorted(skus, key=lambda r: (-r[1], r[0]))
cls = {}
prior = 0
i = 0
while i < len(order):
j = i
while j < len(order) and order[j][1] == order[i][1]:
j += 1
for sku, picks in order[i:j]:
if picks == 0:
cls[sku] = 'D'
elif prior * 100 < 80 * total:
cls[sku] = 'A'
elif prior * 100 < 95 * total:
cls[sku] = 'B'
else:
cls[sku] = 'C'
prior += order[i][1] * (j - i)
i = j
return [[sku, cls[sku]] for sku, _ in skus]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['generated mix 3', [[['S24', 20], ['S10', 2], ['S13', 20], ['S21', 40], ['S27', 3], ['S15', 60], ['S26', 5], ['S09', 40]]], [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 7', [[['S28', 5], ['S25', 20], ['S14', 5], ['S01', 1], ['S10', 0], ['S19', 1], ['S17', 5], ['S16', 3]]], [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']]]], [['generated mix 5', [[['S20', 60], ['S04', 20], ['S16', 3], ['S05', 8]]], [['S20', 'A'], ['S04', 'A'], ['S16', 'C'], ['S05', 'B']]], ['generated mix 9', [[['S08', 5], ['S03', 3], ['S12', 5], ['S18', 2], ['S23', 5]]], [['S08', 'A'], ['S03', 'A'], ['S12', 'A'], ['S18', 'B'], ['S23', 'A']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['generated mix 10', [[['S07', 20], ['S27', 60], ['S28', 8]]], [['S07', 'A'], ['S27', 'A'], ['S28', 'B']]], ['generated mix 18', [[['S03', 10], ['S14', 10], ['S28', 0], ['S16', 20], ['S23', 60]]], [['S03', 'B'], ['S14', 'B'], ['S28', 'D'], ['S16', 'A'], ['S23', 'A']]]], [['generated mix 12', [[['S16', 2], ['S19', 5], ['S27', 1], ['S01', 20], ['S29', 0]]], [['S16', 'B'], ['S19', 'A'], ['S27', 'C'], ['S01', 'A'], ['S29', 'D']]], ['generated mix 16', [[['S23', 60], ['S12', 0], ['S11', 8], ['S14', 8], ['S06', 20], ['S04', 40], ['S08', 5], ['S22', 5]]], [['S23', 'A'], ['S12', 'D'], ['S11', 'B'], ['S14', 'B'], ['S06', 'A'], ['S04', 'A'], ['S08', 'B'], ['S22', 'B']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['generated mix 21', [[['S23', 1], ['S07', 1], ['S04', 0], ['S22', 60], ['S03', 60], ['S21', 1]]], [['S23', 'C'], ['S07', 'C'], ['S04', 'D'], ['S22', 'A'], ['S03', 'A'], ['S21', 'C']]], ['generated mix 29', [[['S28', 5], ['S11', 60]]], [['S28', 'B'], ['S11', 'A']]]], [['generated mix 23', [[['S06', 0], ['S18', 0], ['S20', 1], ['S21', 10], ['S16', 2], ['S10', 10], ['S24', 3], ['S29', 40]]], [['S06', 'D'], ['S18', 'D'], ['S20', 'C'], ['S21', 'A'], ['S16', 'C'], ['S10', 'A'], ['S24', 'B'], ['S29', 'A']]], ['tie group straddles 80%', [[['x', 40], ['y', 40], ['z', 20]]], [['x', 'A'], ['y', 'A'], ['z', 'B']]], ['all zero', [[['a', 0], ['b', 0]]], [['a', 'D'], ['b', 'D']]], ['input order kept', [[['m', 1], ['k', 9], ['a', 90]]], [['m', 'C'], ['k', 'B'], ['a', 'A']]], ['empty', [[]], []], ['generated mix 31', [[['S14', 20], ['S12', 8], ['S16', 3], ['S01', 0], ['S09', 20]]], [['S14', 'A'], ['S12', 'A'], ['S16', 'B'], ['S01', 'D'], ['S09', 'A']]], ['generated mix 39', [[['S09', 40], ['S22', 20], ['S23', 10], ['S15', 5], ['S18', 20], ['S07', 20], ['S02', 2]]], [['S09', 'A'], ['S22', 'A'], ['S23', 'B'], ['S15', 'B'], ['S18', 'A'], ['S07', 'A'], ['S02', 'C']]], ['generated mix 47', [[['S11', 0], ['S08', 20], ['S05', 3], ['S29', 0], ['S24', 2], ['S03', 20]]], [['S11', 'D'], ['S08', 'A'], ['S05', 'B'], ['S29', 'D'], ['S24', 'C'], ['S03', 'A']]]], [['generated mix 30', [[['S27', 3], ['S03', 10], ['S25', 20], ['S08', 1], ['S09', 3], ['S01', 10], ['S20', 60]]], [['S27', 'B'], ['S03', 'A'], ['S25', 'A'], ['S08', 'C'], ['S09', 'B'], ['S01', 'A'], ['S20', 'A']]], ['generated mix 32', [[['S07', 2], ['S02', 1], ['S17', 8], ['S24', 40], ['S05', 8], ['S11', 8], ['S28', 10]]], [['S07', 'C'], ['S02', 'C'], ['S17', 'A'], ['S24', 'A'], ['S05', 'A'], ['S11', 'A'], ['S28', 'A']]], ['exact 95 boundary', [[['p', 80], ['q', 15], ['r', 5]]], [['p', 'A'], ['q', 'B'], ['r', 'C']]], ['single sku', [[['solo', 3]]], [['solo', 'A']]], ['crossing sku is A', [[['a', 70], ['b', 20], ['c', 10]]], [['a', 'A'], ['b', 'A'], ['c', 'B']]], ['dead stock', [[['a', 5], ['b', 0]]], [['a', 'A'], ['b', 'D']]], ['generated mix 43', [[['S18', 60], ['S28', 60], ['S01', 3], ['S15', 5]]], [['S18', 'A'], ['S28', 'A'], ['S01', 'C'], ['S15', 'B']]], ['generated mix 51', [[['S24', 3], ['S13', 5], ['S29', 60], ['S16', 0], ['S22', 2], ['S05', 8], ['S14', 5], ['S04', 40]]], [['S24', 'C'], ['S13', 'B'], ['S29', 'A'], ['S16', 'D'], ['S22', 'C'], ['S05', 'B'], ['S14', 'B'], ['S04', 'A']]]]]
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 |
|---|---|---|---|
| crossing sku is A | [['a', 'A'], ['b', 'A'], ['c', 'B']] | [['a', 'A'], ['b', 'A'], ['c', 'B']] | Passed |
| generated mix 3 | [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']] | [['S24', 'A'], ['S10', 'C'], ['S13', 'A'], ['S21', 'A'], ['S27', 'C'], ['S15', 'A'], ['S26', 'B'], ['S09', 'A']] | Passed |
| tie group straddles 80% | [['x', 'A'], ['y', 'A'], ['z', 'B']] | [['x', 'A'], ['y', 'A'], ['z', 'B']] | Passed |
| all zero | [['a', 'D'], ['b', 'D']] | [['a', 'D'], ['b', 'D']] | Passed |
| input order kept | [['m', 'C'], ['k', 'B'], ['a', 'A']] | [['m', 'C'], ['k', 'B'], ['a', 'A']] | Passed |
| empty | [] | [] | Passed |
| dead stock | [['a', 'A'], ['b', 'D']] | [['a', 'A'], ['b', 'D']] | Passed |
| generated mix 7 | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | [['S28', 'A'], ['S25', 'A'], ['S14', 'A'], ['S01', 'C'], ['S10', 'D'], ['S19', 'C'], ['S17', 'A'], ['S16', 'B']] | Passed |
SHA-256 / e8b821592259700d23f0279569864e0a37bdeedde9064d5f2d8fc337a424137d
Verification & scope
Stipulated toy ABC policy with fixed 80/95 bands; not a vendor WMS rule set. 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:08.289921+00:00.
Case digest / 21d202aa12b7063934a96dd743560586b2fc0db38600cd78cda12451f5cbed07