FA-86171 / Game economy crafting balance / Open access
Inventory stack insertion: Top-up ignores existing count · case 01
Partial stacks overflow past max_stack.
ROOT CAUSE
The top-up amount ignores how many items the stack already holds.
VERIFIED REPAIR
Restore `min(left, max_stack - s[1])` at the top-up amount step.
Unsuccessful approach: Filling to max regardless of the remaining quantity creates items.
Case contract
slots = list of None or [name, count]; names are case sensitive. First top up partial stacks (count < max_stack) of the same item in slot order, then fill empty slots in order with new stacks of at most max_stack. Reserved placeholders [name, 0] count as partial stacks. Legacy stacks above max_stack are left untouched. Returns {slots, leftover}.
Why this case matters
Game economies leak or destroy currency when one crafting or pricing rule is off by one boundary, rounding stage or state update; the defect is observable in exact integer outcomes.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, item, qty, max_stack):
slots = [s if s is None else list(s) for s in slots]
left = qty
for s in slots:
if left == 0:
break
if s is not None and s[0] == item and s[1] < max_stack:
add = min(left, max_stack)
s[1] += add
left -= add
for i in range(len(slots)):
if left == 0:
break
if slots[i] is None:
add = min(left, max_stack)
slots[i] = [item, add]
left -= add
return {'slots': slots, 'leftover': left}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['Arrow', 1], ['arrow', 1], ['Potion', 20], ['arrow', 19]], 'arrow', 20, 20],
{'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('partial repair boundary #1',
[[None, ['Potion', 0], ['Potion', 20], ['arrow', 1]], 'arrow', 1, 10],
{'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('fault site top-up amount #2',
[[None, ['arrow', 1], ['Arrow', 19], ['arrow', 10], None], 'arrow', 20, 5],
{'slots': [['arrow', 5], ['arrow', 5], ['Arrow', 19], ['arrow', 10], ['arrow', 5]], 'leftover': 6}),
('partial repair boundary #1',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['Arrow', 25], ['Arrow', 25], ['Potion', 1]], 'Potion', 7, 20],
{'slots': [['Arrow', 25], ['Arrow', 25], ['Potion', 8]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 17], ['arrow', 1], ['Arrow', 0], ['arrow', 19]], 'arrow', 45, 20],
{'slots': [['Potion', 17], ['arrow', 20], ['Arrow', 0], ['arrow', 20]], 'leftover': 25}),
('fault site top-up amount #2',
[[['Arrow', 5]], 'Arrow', 20, 20],
{'slots': [['Arrow', 20]], 'leftover': 5}),
('partial repair boundary #1',
[[['arrow', 1], None, ['Potion', 5]], 'arrow', 7, 20],
{'slots': [['arrow', 8], None, ['Potion', 5]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 0], ['Potion', 19]], 'Arrow', 7, 10],
{'slots': [['arrow', 20], ['Arrow', 7], ['Potion', 19]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['arrow', 25], None, ['Potion', 5], None, ['arrow', 20]], 'Potion', 7, 10],
{'slots': [['arrow', 25], ['Potion', 2], ['Potion', 10], None, ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, None, ['Arrow', 11], ['Potion', 10], ['Arrow', 25], None], 'Potion', 20, 20],
{'slots': [['Potion', 10], None, ['Arrow', 11], ['Potion', 20], ['Arrow', 25], None], 'leftover': 0}),
('partial repair boundary #1',
[[['arrow', 5], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'arrow', 1, 20],
{'slots': [['arrow', 6], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 0]], 'Potion', 1, 20],
{'slots': [['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 1]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[None, ['Arrow', 16], ['arrow', 20], None, ['Arrow', 25], None], 'Potion', 20, 10],
{'slots': [['Potion', 10], ['Arrow', 16], ['arrow', 20], ['Potion', 10], ['Arrow', 25], None],
'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 0], ['Arrow', 0], ['Arrow', 1]], 'Arrow', 45, 10],
{'slots': [['Potion', 0], ['Arrow', 10], ['Arrow', 10]], 'leftover': 26}),
('fault site top-up amount #2',
[[None, ['Potion', 11], ['arrow', 5], ['Potion', 19], None, ['Arrow', 0]], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['Potion', 11], ['arrow', 10], ['Potion', 19], ['arrow', 10], ['Arrow', 0]],
'leftover': 20}),
('partial repair boundary #1',
[[['Arrow', 5], None, ['Arrow', 20], ['arrow', 0], ['Potion', 0]], 'arrow', 7, 20],
{'slots': [['Arrow', 5], None, ['Arrow', 20], ['arrow', 7], ['Potion', 0]], 'leftover': 0}),
('partial repair boundary #2',
[[None, None, ['arrow', 14], ['Arrow', 0], None, None], 'Arrow', 1, 5],
{'slots': [None, None, ['arrow', 14], ['Arrow', 1], None, None], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1', [[['Potion', 0]], 'Arrow', 45, 5], {'slots': [['Potion', 0]], 'leftover': 45})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| two partial stacks #1 | {'leftover': 0, 'slots': [['Arrow', 22], ['Arrow', 15], None]} | {'leftover': 0, 'slots': [['Arrow', 20], ['Arrow', 17], None]} | Failed |
| fault site top-up amount #1 | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 21], ['Potion', 20], ['arrow', 19]]} | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]]} | Failed |
| fault site top-up amount #2 | {'leftover': 5, 'slots': [['arrow', 10], ['arrow', 15], ['arrow', 10], ['arrow', 10]]} | {'leftover': 10, 'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]]} | Failed |
| partial repair boundary #1 | {'leftover': 0, 'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]]} | {'leftover': 0, 'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]]} | Passed |
| partial repair boundary #2 | {'leftover': 0, 'slots': [['arrow', 5], ['Arrow', 2]]} | {'leftover': 0, 'slots': [['arrow', 5], ['Arrow', 2]]} | Passed |
| legacy overfull stack #1 | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | Passed |
| case distinct item #1 | {'leftover': 2, 'slots': [['arrow', 3]]} | {'leftover': 2, 'slots': [['arrow', 3]]} | Passed |
| control #1 | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | Passed |
SHA-256 / 1c64e7d66b4a1378ad45050571fb487dd29065e8bccf969eaadb0fcf62dc74e9
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, item, qty, max_stack):
slots = [s if s is None else list(s) for s in slots]
left = qty
for s in slots:
if left == 0:
break
if s is not None and s[0] == item and s[1] < max_stack:
add = max_stack - s[1]
s[1] += add
left -= add
for i in range(len(slots)):
if left == 0:
break
if slots[i] is None:
add = min(left, max_stack)
slots[i] = [item, add]
left -= add
return {'slots': slots, 'leftover': left}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['Arrow', 1], ['arrow', 1], ['Potion', 20], ['arrow', 19]], 'arrow', 20, 20],
{'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('partial repair boundary #1',
[[None, ['Potion', 0], ['Potion', 20], ['arrow', 1]], 'arrow', 1, 10],
{'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('fault site top-up amount #2',
[[None, ['arrow', 1], ['Arrow', 19], ['arrow', 10], None], 'arrow', 20, 5],
{'slots': [['arrow', 5], ['arrow', 5], ['Arrow', 19], ['arrow', 10], ['arrow', 5]], 'leftover': 6}),
('partial repair boundary #1',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['Arrow', 25], ['Arrow', 25], ['Potion', 1]], 'Potion', 7, 20],
{'slots': [['Arrow', 25], ['Arrow', 25], ['Potion', 8]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 17], ['arrow', 1], ['Arrow', 0], ['arrow', 19]], 'arrow', 45, 20],
{'slots': [['Potion', 17], ['arrow', 20], ['Arrow', 0], ['arrow', 20]], 'leftover': 25}),
('fault site top-up amount #2',
[[['Arrow', 5]], 'Arrow', 20, 20],
{'slots': [['Arrow', 20]], 'leftover': 5}),
('partial repair boundary #1',
[[['arrow', 1], None, ['Potion', 5]], 'arrow', 7, 20],
{'slots': [['arrow', 8], None, ['Potion', 5]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 0], ['Potion', 19]], 'Arrow', 7, 10],
{'slots': [['arrow', 20], ['Arrow', 7], ['Potion', 19]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['arrow', 25], None, ['Potion', 5], None, ['arrow', 20]], 'Potion', 7, 10],
{'slots': [['arrow', 25], ['Potion', 2], ['Potion', 10], None, ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, None, ['Arrow', 11], ['Potion', 10], ['Arrow', 25], None], 'Potion', 20, 20],
{'slots': [['Potion', 10], None, ['Arrow', 11], ['Potion', 20], ['Arrow', 25], None], 'leftover': 0}),
('partial repair boundary #1',
[[['arrow', 5], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'arrow', 1, 20],
{'slots': [['arrow', 6], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 0]], 'Potion', 1, 20],
{'slots': [['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 1]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[None, ['Arrow', 16], ['arrow', 20], None, ['Arrow', 25], None], 'Potion', 20, 10],
{'slots': [['Potion', 10], ['Arrow', 16], ['arrow', 20], ['Potion', 10], ['Arrow', 25], None],
'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 0], ['Arrow', 0], ['Arrow', 1]], 'Arrow', 45, 10],
{'slots': [['Potion', 0], ['Arrow', 10], ['Arrow', 10]], 'leftover': 26}),
('fault site top-up amount #2',
[[None, ['Potion', 11], ['arrow', 5], ['Potion', 19], None, ['Arrow', 0]], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['Potion', 11], ['arrow', 10], ['Potion', 19], ['arrow', 10], ['Arrow', 0]],
'leftover': 20}),
('partial repair boundary #1',
[[['Arrow', 5], None, ['Arrow', 20], ['arrow', 0], ['Potion', 0]], 'arrow', 7, 20],
{'slots': [['Arrow', 5], None, ['Arrow', 20], ['arrow', 7], ['Potion', 0]], 'leftover': 0}),
('partial repair boundary #2',
[[None, None, ['arrow', 14], ['Arrow', 0], None, None], 'Arrow', 1, 5],
{'slots': [None, None, ['arrow', 14], ['Arrow', 1], None, None], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1', [[['Potion', 0]], 'Arrow', 45, 5], {'slots': [['Potion', 0]], 'leftover': 45})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| two partial stacks #1 | {'leftover': 0, 'slots': [['Arrow', 20], ['Arrow', 20], ['Arrow', -3]]} | {'leftover': 0, 'slots': [['Arrow', 20], ['Arrow', 17], None]} | Failed |
| fault site top-up amount #1 | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]]} | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]]} | Passed |
| fault site top-up amount #2 | {'leftover': 10, 'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]]} | {'leftover': 10, 'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]]} | Passed |
| partial repair boundary #1 | {'leftover': 0, 'slots': [['arrow', -8], ['Potion', 0], ['Potion', 20], ['arrow', 10]]} | {'leftover': 0, 'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]]} | Failed |
| partial repair boundary #2 | {'leftover': -18, 'slots': [['arrow', 5], ['Arrow', 20]]} | {'leftover': 0, 'slots': [['arrow', 5], ['Arrow', 2]]} | Failed |
| legacy overfull stack #1 | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | Passed |
| case distinct item #1 | {'leftover': 2, 'slots': [['arrow', 3]]} | {'leftover': 2, 'slots': [['arrow', 3]]} | Passed |
| control #1 | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | Passed |
SHA-256 / c320952eb28d0d8c8c5276b30e83876336e04ddb922662d66d186ed7f07fca8a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(slots, item, qty, max_stack):
slots = [s if s is None else list(s) for s in slots]
left = qty
for s in slots:
if left == 0:
break
if s is not None and s[0] == item and s[1] < max_stack:
add = min(left, max_stack - s[1])
s[1] += add
left -= add
for i in range(len(slots)):
if left == 0:
break
if slots[i] is None:
add = min(left, max_stack)
slots[i] = [item, add]
left -= add
return {'slots': slots, 'leftover': left}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
cases = [[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['Arrow', 1], ['arrow', 1], ['Potion', 20], ['arrow', 19]], 'arrow', 20, 20],
{'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('partial repair boundary #1',
[[None, ['Potion', 0], ['Potion', 20], ['arrow', 1]], 'arrow', 1, 10],
{'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[None, ['arrow', 5], None, None], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]], 'leftover': 10}),
('fault site top-up amount #2',
[[None, ['arrow', 1], ['Arrow', 19], ['arrow', 10], None], 'arrow', 20, 5],
{'slots': [['arrow', 5], ['arrow', 5], ['Arrow', 19], ['arrow', 10], ['arrow', 5]], 'leftover': 6}),
('partial repair boundary #1',
[[['arrow', 5], ['Arrow', 1]], 'Arrow', 1, 20],
{'slots': [['arrow', 5], ['Arrow', 2]], 'leftover': 0}),
('partial repair boundary #2',
[[['Arrow', 25], ['Arrow', 25], ['Potion', 1]], 'Potion', 7, 20],
{'slots': [['Arrow', 25], ['Arrow', 25], ['Potion', 8]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 17], ['arrow', 1], ['Arrow', 0], ['arrow', 19]], 'arrow', 45, 20],
{'slots': [['Potion', 17], ['arrow', 20], ['Arrow', 0], ['arrow', 20]], 'leftover': 25}),
('fault site top-up amount #2',
[[['Arrow', 5]], 'Arrow', 20, 20],
{'slots': [['Arrow', 20]], 'leftover': 5}),
('partial repair boundary #1',
[[['arrow', 1], None, ['Potion', 5]], 'arrow', 7, 20],
{'slots': [['arrow', 8], None, ['Potion', 5]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 0], ['Potion', 19]], 'Arrow', 7, 10],
{'slots': [['arrow', 20], ['Arrow', 7], ['Potion', 19]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[['Arrow', 6], None, ['arrow', 5]], 'Potion', 0, 20],
{'slots': [['Arrow', 6], None, ['arrow', 5]], 'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['arrow', 25], None, ['Potion', 5], None, ['arrow', 20]], 'Potion', 7, 10],
{'slots': [['arrow', 25], ['Potion', 2], ['Potion', 10], None, ['arrow', 20]], 'leftover': 0}),
('fault site top-up amount #2',
[[None, None, ['Arrow', 11], ['Potion', 10], ['Arrow', 25], None], 'Potion', 20, 20],
{'slots': [['Potion', 10], None, ['Arrow', 11], ['Potion', 20], ['Arrow', 25], None], 'leftover': 0}),
('partial repair boundary #1',
[[['arrow', 5], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'arrow', 1, 20],
{'slots': [['arrow', 6], ['Potion', 5], ['Potion', 1], ['Potion', 1], ['Arrow', 3]], 'leftover': 0}),
('partial repair boundary #2',
[[['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 0]], 'Potion', 1, 20],
{'slots': [['arrow', 20], ['Arrow', 16], ['arrow', 20], None, None, ['Potion', 1]], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1',
[[None, ['Arrow', 16], ['arrow', 20], None, ['Arrow', 25], None], 'Potion', 20, 10],
{'slots': [['Potion', 10], ['Arrow', 16], ['arrow', 20], ['Potion', 10], ['Arrow', 25], None],
'leftover': 0})],
[('two partial stacks #1',
[[['Arrow', 18], ['Arrow', 15], None], 'Arrow', 4, 20],
{'slots': [['Arrow', 20], ['Arrow', 17], None], 'leftover': 0}),
('fault site top-up amount #1',
[[['Potion', 0], ['Arrow', 0], ['Arrow', 1]], 'Arrow', 45, 10],
{'slots': [['Potion', 0], ['Arrow', 10], ['Arrow', 10]], 'leftover': 26}),
('fault site top-up amount #2',
[[None, ['Potion', 11], ['arrow', 5], ['Potion', 19], None, ['Arrow', 0]], 'arrow', 45, 10],
{'slots': [['arrow', 10], ['Potion', 11], ['arrow', 10], ['Potion', 19], ['arrow', 10], ['Arrow', 0]],
'leftover': 20}),
('partial repair boundary #1',
[[['Arrow', 5], None, ['Arrow', 20], ['arrow', 0], ['Potion', 0]], 'arrow', 7, 20],
{'slots': [['Arrow', 5], None, ['Arrow', 20], ['arrow', 7], ['Potion', 0]], 'leftover': 0}),
('partial repair boundary #2',
[[None, None, ['arrow', 14], ['Arrow', 0], None, None], 'Arrow', 1, 5],
{'slots': [None, None, ['arrow', 14], ['Arrow', 1], None, None], 'leftover': 0}),
('legacy overfull stack #1',
[[['Arrow', 25], None], 'Arrow', 3, 20],
{'slots': [['Arrow', 25], ['Arrow', 3]], 'leftover': 0}),
('case distinct item #1', [[['arrow', 3]], 'Arrow', 2, 20], {'slots': [['arrow', 3]], 'leftover': 2}),
('control #1', [[['Potion', 0]], 'Arrow', 45, 5], {'slots': [['Potion', 0]], 'leftover': 45})]]
for label, args, expected in cases[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 |
|---|---|---|---|
| two partial stacks #1 | {'leftover': 0, 'slots': [['Arrow', 20], ['Arrow', 17], None]} | {'leftover': 0, 'slots': [['Arrow', 20], ['Arrow', 17], None]} | Passed |
| fault site top-up amount #1 | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]]} | {'leftover': 0, 'slots': [None, ['Arrow', 1], ['arrow', 20], ['Potion', 20], ['arrow', 20]]} | Passed |
| fault site top-up amount #2 | {'leftover': 10, 'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]]} | {'leftover': 10, 'slots': [['arrow', 10], ['arrow', 10], ['arrow', 10], ['arrow', 10]]} | Passed |
| partial repair boundary #1 | {'leftover': 0, 'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]]} | {'leftover': 0, 'slots': [None, ['Potion', 0], ['Potion', 20], ['arrow', 2]]} | Passed |
| partial repair boundary #2 | {'leftover': 0, 'slots': [['arrow', 5], ['Arrow', 2]]} | {'leftover': 0, 'slots': [['arrow', 5], ['Arrow', 2]]} | Passed |
| legacy overfull stack #1 | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | {'leftover': 0, 'slots': [['Arrow', 25], ['Arrow', 3]]} | Passed |
| case distinct item #1 | {'leftover': 2, 'slots': [['arrow', 3]]} | {'leftover': 2, 'slots': [['arrow', 3]]} | Passed |
| control #1 | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | {'leftover': 0, 'slots': [['Arrow', 6], None, ['arrow', 5]]} | Passed |
SHA-256 / 7342b71235e00bae9aec787f2b06311054aa6f5901bede49878b3225542c0659
Verification & scope
Deterministic toy contract stipulated for this model; integer or exact arithmetic only, not a reproduction of any specific game engine. 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:50:47.033569+00:00.
Case digest / dd7b16af3f6153548f9928b032c17b5c85a4e72e506f1466213fdd0d0b564d3a