FA-84966 / Fantasy sports scoring / Open access
Started player benched after his game kicked off · case 01
A user removes a starter whose game already began and replaces him with a later player.
ROOT CAUSE
Only the incoming player's kickoff is checked; the outgoing starter's lock is ignored.
VERIFIED REPAIR
Reject the swap if either player is locked.
Unsuccessful approach: Requiring both players to be locked rejects far too few swaps.
Case contract
Apply lineup swaps [time, slot, incoming player] in time order (submission order on equal times). A swap is rejected if either the outgoing or incoming player's game has kicked off at or before the swap time, or if the incoming player already occupies another slot. Return the final lineup, the sorted indices of rejected swaps and the lineup's total points.
Why this case matters
Game-time lineup locks decide whether late swaps count; wrong lock semantics let users bench players after they score.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(lineup, swaps, kickoffs, points):
cur = dict(lineup)
rejected = []
order = sorted(range(len(swaps)), key=lambda i: (swaps[i][0], i))
for i in order:
t, slot, new = swaps[i]
old = cur[slot]
if kickoffs[new] <= t:
rejected.append(i)
continue
if new in cur.values():
rejected.append(i)
continue
cur[slot] = new
total = sum(points[p] for p in cur.values())
return {'final': cur, 'rejected': sorted(rejected), 'total': total}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p2'], [100, 'S1', 'p3'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 21, 'p1': 12, 'p2': 2, 'p3': 8, 'p4': 13, 'p5': 14, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p5'], [200, 'S3', 'p2'], [150, 'S1', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 7, 'p1': 9, 'p2': 26, 'p3': 2, 'p4': 23, 'p5': 22, 'p6': 27}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S2', 'p5'], [150, 'S1', 'p2'], [200, 'S3', 'p2'], [100, 'S2', 'p6'], [250, 'S2', 'p0']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 23, 'p1': 5, 'p2': 20, 'p3': 9, 'p4': 18, 'p5': 18, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 100},
{'p0': 13, 'p1': 26, 'p2': 15, 'p3': 25, 'p4': 17, 'p5': 14, 'p6': 23}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p0'], [150, 'S2', 'p2'], [300, 'S2', 'p3'], [250, 'S2', 'p3']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 15, 'p2': 29, 'p3': 18, 'p4': 14, 'p5': 22, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p6'], [250, 'S2', 'p6'], [300, 'S2', 'p3']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 3, 'p1': 23, 'p2': 25, 'p3': 1, 'p4': 27, 'p5': 6, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p5'], [200, 'S1', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 27, 'p1': 10, 'p2': 27, 'p3': 29, 'p4': 7, 'p5': 10, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 22, 'p1': 25, 'p2': 13, 'p3': 26, 'p4': 20, 'p5': 17, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 60}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p6'], [250, 'S1', 'p4'], [200, 'S1', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 4, 'p1': 27, 'p2': 24, 'p3': 6, 'p4': 6, 'p5': 22, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 55}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3'], [100, 'S2', 'p2'], [100, 'S2', 'p5']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 23, 'p1': 10, 'p2': 2, 'p3': 29, 'p4': 6, 'p5': 17, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 54}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p3'], [200, 'S3', 'p6'], [50, 'S2', 'p0'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 20, 'p1': 20, 'p2': 15, 'p3': 10, 'p4': 18, 'p5': 6, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p6'], [200, 'S2', 'p2'], [200, 'S1', 'p6'], [50, 'S1', 'p0'], [50, 'S1', 'p4']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 4, 'p1': 20, 'p2': 10, 'p3': 15, 'p4': 16, 'p5': 9, 'p6': 15}],
{'final': {'S1': 'p4', 'S2': 'p2', 'S3': 'p6'}, 'rejected': [2, 3], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p3'], [200, 'S2', 'p2'], [250, 'S1', 'p1']],
{'p0': 300, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 24, 'p1': 25, 'p2': 22, 'p3': 17, 'p4': 7, 'p5': 19, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 71}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [50, 'S2', 'p4'], [300, 'S1', 'p2'], [300, 'S1', 'p0'], [200, 'S3', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 12, 'p1': 2, 'p2': 10, 'p3': 27, 'p4': 29, 'p5': 15, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3, 4], 'total': 51})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p2'], [250, 'S3', 'p3'], [300, 'S3', 'p1']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 14, 'p1': 27, 'p2': 26, 'p3': 5, 'p4': 30, 'p5': 25, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 67}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p4'], [200, 'S1', 'p5'], [200, 'S3', 'p3'], [150, 'S3', 'p6']],
{'p0': 200, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 16, 'p1': 25, 'p2': 9, 'p3': 15, 'p4': 30, 'p5': 8, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 59}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [150, 'S1', 'p1'], [300, 'S2', 'p4'], [100, 'S2', 'p3'], [250, 'S2', 'p6']],
{'p0': 300, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 15, 'p1': 11, 'p2': 11, 'p3': 22, 'p4': 15, 'p5': 9, 'p6': 1}],
{'final': {'S1': 'p1', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 2, 4], 'total': 44}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 15, 'p1': 5, 'p2': 20, 'p3': 15, 'p4': 11, 'p5': 26, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S2', 'p2'], [300, 'S3', 'p6']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 14, 'p1': 1, 'p2': 8, 'p3': 7, 'p4': 25, 'p5': 0, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 27}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p0']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 2, 'p1': 4, 'p2': 17, 'p3': 15, 'p4': 9, 'p5': 19, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 23}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 10, 'p1': 18, 'p2': 17, 'p3': 23, 'p4': 6, 'p5': 14, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 45})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p2'], [100, 'S3', 'p5'], [250, 'S2', 'p2']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 1, 'p1': 30, 'p2': 8, 'p3': 0, 'p4': 15, 'p5': 8, 'p6': 13}],
{'final': {'S1': 'p0', 'S2': 'p2', 'S3': 'p5'}, 'rejected': [0], 'total': 17}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [200, 'S1', 'p6'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 6, 'p1': 28, 'p2': 4, 'p3': 10, 'p4': 30, 'p5': 16, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p3'], [200, 'S2', 'p1'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 16, 'p1': 19, 'p2': 13, 'p3': 16, 'p4': 16, 'p5': 28, 'p6': 6}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 48}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p5'], [150, 'S2', 'p5'], [300, 'S1', 'p0'], [200, 'S3', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 100},
{'p0': 10, 'p1': 27, 'p2': 14, 'p3': 26, 'p4': 23, 'p5': 22, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1, 2, 3], 'total': 59}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S3', 'p0'], [100, 'S1', 'p6'], [300, 'S1', 'p6'], [100, 'S2', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 8, 'p1': 0, 'p2': 0, 'p3': 1, 'p4': 9, 'p5': 11, 'p6': 5}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 5}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p2'], [250, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 200},
{'p0': 18, 'p1': 13, 'p2': 22, 'p3': 1, 'p4': 29, 'p5': 22, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p4'], [50, 'S2', 'p4'], [200, 'S1', 'p4'], [200, 'S1', 'p4']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 9, 'p1': 18, 'p2': 0, 'p3': 10, 'p4': 19, 'p5': 28, 'p6': 10}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 28})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p0'], [200, 'S3', 'p3'], [150, 'S1', 'p2']],
{'p0': 200, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 17, 'p1': 11, 'p2': 17, 'p3': 0, 'p4': 0, 'p5': 8, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 45}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p3'], [250, 'S1', 'p2'], [100, 'S2', 'p2'], [50, 'S1', 'p6'], [100, 'S3', 'p0']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 16, 'p1': 6, 'p2': 19, 'p3': 17, 'p4': 8, 'p5': 0, 'p6': 10}],
{'final': {'S1': 'p3', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [1, 2, 4], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p4'], [50, 'S1', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 13, 'p1': 27, 'p2': 28, 'p3': 1, 'p4': 11, 'p5': 10, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 68}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p4']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 13, 'p1': 5, 'p2': 1, 'p3': 4, 'p4': 17, 'p5': 29, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 19}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p5'], [150, 'S3', 'p5'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 15, 'p1': 17, 'p2': 18, 'p3': 0, 'p4': 9, 'p5': 13, 'p6': 21}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 46}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [100, 'S2', 'p2'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 7, 'p1': 21, 'p2': 11, 'p3': 3, 'p4': 8, 'p5': 13, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 39}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p0'], [50, 'S2', 'p3'], [100, 'S1', 'p2'], [100, 'S3', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 30, 'p2': 12, 'p3': 13, 'p4': 20, 'p5': 16, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p6'}, 'rejected': [0, 2], 'total': 54})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: outgoing player lock | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 42} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35} | Failed |
| partial repair probe: outgoing player lock | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42} | Passed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47} | Passed |
| normal control 1 | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | Passed |
| normal control 3 | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | Passed |
SHA-256 / c53cebab0f1dc7993e016af78c3a987184877763b3dbe377e3c711c2d7504fac
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(lineup, swaps, kickoffs, points):
cur = dict(lineup)
rejected = []
order = sorted(range(len(swaps)), key=lambda i: (swaps[i][0], i))
for i in order:
t, slot, new = swaps[i]
old = cur[slot]
if max(kickoffs[old], kickoffs[new]) <= t:
rejected.append(i)
continue
if new in cur.values():
rejected.append(i)
continue
cur[slot] = new
total = sum(points[p] for p in cur.values())
return {'final': cur, 'rejected': sorted(rejected), 'total': total}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p2'], [100, 'S1', 'p3'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 21, 'p1': 12, 'p2': 2, 'p3': 8, 'p4': 13, 'p5': 14, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p5'], [200, 'S3', 'p2'], [150, 'S1', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 7, 'p1': 9, 'p2': 26, 'p3': 2, 'p4': 23, 'p5': 22, 'p6': 27}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S2', 'p5'], [150, 'S1', 'p2'], [200, 'S3', 'p2'], [100, 'S2', 'p6'], [250, 'S2', 'p0']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 23, 'p1': 5, 'p2': 20, 'p3': 9, 'p4': 18, 'p5': 18, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 100},
{'p0': 13, 'p1': 26, 'p2': 15, 'p3': 25, 'p4': 17, 'p5': 14, 'p6': 23}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p0'], [150, 'S2', 'p2'], [300, 'S2', 'p3'], [250, 'S2', 'p3']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 15, 'p2': 29, 'p3': 18, 'p4': 14, 'p5': 22, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p6'], [250, 'S2', 'p6'], [300, 'S2', 'p3']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 3, 'p1': 23, 'p2': 25, 'p3': 1, 'p4': 27, 'p5': 6, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p5'], [200, 'S1', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 27, 'p1': 10, 'p2': 27, 'p3': 29, 'p4': 7, 'p5': 10, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 22, 'p1': 25, 'p2': 13, 'p3': 26, 'p4': 20, 'p5': 17, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 60}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p6'], [250, 'S1', 'p4'], [200, 'S1', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 4, 'p1': 27, 'p2': 24, 'p3': 6, 'p4': 6, 'p5': 22, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 55}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3'], [100, 'S2', 'p2'], [100, 'S2', 'p5']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 23, 'p1': 10, 'p2': 2, 'p3': 29, 'p4': 6, 'p5': 17, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 54}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p3'], [200, 'S3', 'p6'], [50, 'S2', 'p0'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 20, 'p1': 20, 'p2': 15, 'p3': 10, 'p4': 18, 'p5': 6, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p6'], [200, 'S2', 'p2'], [200, 'S1', 'p6'], [50, 'S1', 'p0'], [50, 'S1', 'p4']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 4, 'p1': 20, 'p2': 10, 'p3': 15, 'p4': 16, 'p5': 9, 'p6': 15}],
{'final': {'S1': 'p4', 'S2': 'p2', 'S3': 'p6'}, 'rejected': [2, 3], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p3'], [200, 'S2', 'p2'], [250, 'S1', 'p1']],
{'p0': 300, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 24, 'p1': 25, 'p2': 22, 'p3': 17, 'p4': 7, 'p5': 19, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 71}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [50, 'S2', 'p4'], [300, 'S1', 'p2'], [300, 'S1', 'p0'], [200, 'S3', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 12, 'p1': 2, 'p2': 10, 'p3': 27, 'p4': 29, 'p5': 15, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3, 4], 'total': 51})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p2'], [250, 'S3', 'p3'], [300, 'S3', 'p1']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 14, 'p1': 27, 'p2': 26, 'p3': 5, 'p4': 30, 'p5': 25, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 67}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p4'], [200, 'S1', 'p5'], [200, 'S3', 'p3'], [150, 'S3', 'p6']],
{'p0': 200, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 16, 'p1': 25, 'p2': 9, 'p3': 15, 'p4': 30, 'p5': 8, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 59}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [150, 'S1', 'p1'], [300, 'S2', 'p4'], [100, 'S2', 'p3'], [250, 'S2', 'p6']],
{'p0': 300, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 15, 'p1': 11, 'p2': 11, 'p3': 22, 'p4': 15, 'p5': 9, 'p6': 1}],
{'final': {'S1': 'p1', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 2, 4], 'total': 44}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 15, 'p1': 5, 'p2': 20, 'p3': 15, 'p4': 11, 'p5': 26, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S2', 'p2'], [300, 'S3', 'p6']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 14, 'p1': 1, 'p2': 8, 'p3': 7, 'p4': 25, 'p5': 0, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 27}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p0']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 2, 'p1': 4, 'p2': 17, 'p3': 15, 'p4': 9, 'p5': 19, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 23}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 10, 'p1': 18, 'p2': 17, 'p3': 23, 'p4': 6, 'p5': 14, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 45})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p2'], [100, 'S3', 'p5'], [250, 'S2', 'p2']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 1, 'p1': 30, 'p2': 8, 'p3': 0, 'p4': 15, 'p5': 8, 'p6': 13}],
{'final': {'S1': 'p0', 'S2': 'p2', 'S3': 'p5'}, 'rejected': [0], 'total': 17}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [200, 'S1', 'p6'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 6, 'p1': 28, 'p2': 4, 'p3': 10, 'p4': 30, 'p5': 16, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p3'], [200, 'S2', 'p1'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 16, 'p1': 19, 'p2': 13, 'p3': 16, 'p4': 16, 'p5': 28, 'p6': 6}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 48}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p5'], [150, 'S2', 'p5'], [300, 'S1', 'p0'], [200, 'S3', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 100},
{'p0': 10, 'p1': 27, 'p2': 14, 'p3': 26, 'p4': 23, 'p5': 22, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1, 2, 3], 'total': 59}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S3', 'p0'], [100, 'S1', 'p6'], [300, 'S1', 'p6'], [100, 'S2', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 8, 'p1': 0, 'p2': 0, 'p3': 1, 'p4': 9, 'p5': 11, 'p6': 5}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 5}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p2'], [250, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 200},
{'p0': 18, 'p1': 13, 'p2': 22, 'p3': 1, 'p4': 29, 'p5': 22, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p4'], [50, 'S2', 'p4'], [200, 'S1', 'p4'], [200, 'S1', 'p4']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 9, 'p1': 18, 'p2': 0, 'p3': 10, 'p4': 19, 'p5': 28, 'p6': 10}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 28})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p0'], [200, 'S3', 'p3'], [150, 'S1', 'p2']],
{'p0': 200, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 17, 'p1': 11, 'p2': 17, 'p3': 0, 'p4': 0, 'p5': 8, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 45}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p3'], [250, 'S1', 'p2'], [100, 'S2', 'p2'], [50, 'S1', 'p6'], [100, 'S3', 'p0']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 16, 'p1': 6, 'p2': 19, 'p3': 17, 'p4': 8, 'p5': 0, 'p6': 10}],
{'final': {'S1': 'p3', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [1, 2, 4], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p4'], [50, 'S1', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 13, 'p1': 27, 'p2': 28, 'p3': 1, 'p4': 11, 'p5': 10, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 68}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p4']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 13, 'p1': 5, 'p2': 1, 'p3': 4, 'p4': 17, 'p5': 29, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 19}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p5'], [150, 'S3', 'p5'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 15, 'p1': 17, 'p2': 18, 'p3': 0, 'p4': 9, 'p5': 13, 'p6': 21}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 46}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [100, 'S2', 'p2'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 7, 'p1': 21, 'p2': 11, 'p3': 3, 'p4': 8, 'p5': 13, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 39}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p0'], [50, 'S2', 'p3'], [100, 'S1', 'p2'], [100, 'S3', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 30, 'p2': 12, 'p3': 13, 'p4': 20, 'p5': 16, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p6'}, 'rejected': [0, 2], 'total': 54})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: outgoing player lock | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 42} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35} | Failed |
| partial repair probe: outgoing player lock | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 55} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42} | Failed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2, 4], 'total': 61} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47} | Failed |
| normal control 1 | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | Passed |
| normal control 3 | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | Passed |
SHA-256 / 574103c389d56dc0eb0310af7fcb2736349f5ce4b5b38903c74a9798f8be7a1a
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(lineup, swaps, kickoffs, points):
cur = dict(lineup)
rejected = []
order = sorted(range(len(swaps)), key=lambda i: (swaps[i][0], i))
for i in order:
t, slot, new = swaps[i]
old = cur[slot]
if kickoffs[old] <= t or kickoffs[new] <= t:
rejected.append(i)
continue
if new in cur.values():
rejected.append(i)
continue
cur[slot] = new
total = sum(points[p] for p in cur.values())
return {'final': cur, 'rejected': sorted(rejected), 'total': total}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p2'], [100, 'S1', 'p3'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 21, 'p1': 12, 'p2': 2, 'p3': 8, 'p4': 13, 'p5': 14, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p5'], [200, 'S3', 'p2'], [150, 'S1', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 7, 'p1': 9, 'p2': 26, 'p3': 2, 'p4': 23, 'p5': 22, 'p6': 27}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S2', 'p5'], [150, 'S1', 'p2'], [200, 'S3', 'p2'], [100, 'S2', 'p6'], [250, 'S2', 'p0']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 23, 'p1': 5, 'p2': 20, 'p3': 9, 'p4': 18, 'p5': 18, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 100},
{'p0': 13, 'p1': 26, 'p2': 15, 'p3': 25, 'p4': 17, 'p5': 14, 'p6': 23}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p0'], [150, 'S2', 'p2'], [300, 'S2', 'p3'], [250, 'S2', 'p3']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 15, 'p2': 29, 'p3': 18, 'p4': 14, 'p5': 22, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p6'], [250, 'S2', 'p6'], [300, 'S2', 'p3']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 3, 'p1': 23, 'p2': 25, 'p3': 1, 'p4': 27, 'p5': 6, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p5'], [200, 'S1', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 27, 'p1': 10, 'p2': 27, 'p3': 29, 'p4': 7, 'p5': 10, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 22, 'p1': 25, 'p2': 13, 'p3': 26, 'p4': 20, 'p5': 17, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 60}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p6'], [250, 'S1', 'p4'], [200, 'S1', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 4, 'p1': 27, 'p2': 24, 'p3': 6, 'p4': 6, 'p5': 22, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 55}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3'], [100, 'S2', 'p2'], [100, 'S2', 'p5']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 100},
{'p0': 23, 'p1': 10, 'p2': 2, 'p3': 29, 'p4': 6, 'p5': 17, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 54}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p3'], [200, 'S3', 'p6'], [50, 'S2', 'p0'], [150, 'S1', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 20, 'p1': 20, 'p2': 15, 'p3': 10, 'p4': 18, 'p5': 6, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p6'], [200, 'S2', 'p2'], [200, 'S1', 'p6'], [50, 'S1', 'p0'], [50, 'S1', 'p4']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 4, 'p1': 20, 'p2': 10, 'p3': 15, 'p4': 16, 'p5': 9, 'p6': 15}],
{'final': {'S1': 'p4', 'S2': 'p2', 'S3': 'p6'}, 'rejected': [2, 3], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p3'], [200, 'S2', 'p2'], [250, 'S1', 'p1']],
{'p0': 300, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 24, 'p1': 25, 'p2': 22, 'p3': 17, 'p4': 7, 'p5': 19, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 71}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [50, 'S2', 'p4'], [300, 'S1', 'p2'], [300, 'S1', 'p0'], [200, 'S3', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 12, 'p1': 2, 'p2': 10, 'p3': 27, 'p4': 29, 'p5': 15, 'p6': 20}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3, 4], 'total': 51})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p2'], [250, 'S3', 'p3'], [300, 'S3', 'p1']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 14, 'p1': 27, 'p2': 26, 'p3': 5, 'p4': 30, 'p5': 25, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 67}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p4'], [200, 'S1', 'p5'], [200, 'S3', 'p3'], [150, 'S3', 'p6']],
{'p0': 200, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 16, 'p1': 25, 'p2': 9, 'p3': 15, 'p4': 30, 'p5': 8, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 59}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S1', 'p1'], [150, 'S1', 'p1'], [300, 'S2', 'p4'], [100, 'S2', 'p3'], [250, 'S2', 'p6']],
{'p0': 300, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 15, 'p1': 11, 'p2': 11, 'p3': 22, 'p4': 15, 'p5': 9, 'p6': 1}],
{'final': {'S1': 'p1', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 2, 4], 'total': 44}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 15, 'p1': 5, 'p2': 20, 'p3': 15, 'p4': 11, 'p5': 26, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S2', 'p2'], [300, 'S3', 'p6']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 14, 'p1': 1, 'p2': 8, 'p3': 7, 'p4': 25, 'p5': 0, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [1, 2], 'total': 27}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p0']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 2, 'p1': 4, 'p2': 17, 'p3': 15, 'p4': 9, 'p5': 19, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 23}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p1']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 10, 'p1': 18, 'p2': 17, 'p3': 23, 'p4': 6, 'p5': 14, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 45})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p2'], [100, 'S3', 'p5'], [250, 'S2', 'p2']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 300},
{'p0': 1, 'p1': 30, 'p2': 8, 'p3': 0, 'p4': 15, 'p5': 8, 'p6': 13}],
{'final': {'S1': 'p0', 'S2': 'p2', 'S3': 'p5'}, 'rejected': [0], 'total': 17}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [200, 'S1', 'p6'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 6, 'p1': 28, 'p2': 4, 'p3': 10, 'p4': 30, 'p5': 16, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p3'], [200, 'S2', 'p1'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 16, 'p1': 19, 'p2': 13, 'p3': 16, 'p4': 16, 'p5': 28, 'p6': 6}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 48}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S3', 'p5'], [150, 'S2', 'p5'], [300, 'S1', 'p0'], [200, 'S3', 'p1']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 100},
{'p0': 10, 'p1': 27, 'p2': 14, 'p3': 26, 'p4': 23, 'p5': 22, 'p6': 17}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1, 2, 3], 'total': 59}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[250, 'S3', 'p0'], [100, 'S1', 'p6'], [300, 'S1', 'p6'], [100, 'S2', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 8, 'p1': 0, 'p2': 0, 'p3': 1, 'p4': 9, 'p5': 11, 'p6': 5}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 5}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p2'], [250, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 200},
{'p0': 18, 'p1': 13, 'p2': 22, 'p3': 1, 'p4': 29, 'p5': 22, 'p6': 28}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p4'], [50, 'S2', 'p4'], [200, 'S1', 'p4'], [200, 'S1', 'p4']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 9, 'p1': 18, 'p2': 0, 'p3': 10, 'p4': 19, 'p5': 28, 'p6': 10}],
{'final': {'S1': 'p0', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 2, 3], 'total': 28})],
[('regression: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p0'], [200, 'S3', 'p3'], [150, 'S1', 'p2']],
{'p0': 200, 'p1': 200, 'p2': 100, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 17, 'p1': 11, 'p2': 17, 'p3': 0, 'p4': 0, 'p5': 8, 'p6': 19}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 45}),
('partial repair probe: outgoing player lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p3'], [250, 'S1', 'p2'], [100, 'S2', 'p2'], [50, 'S1', 'p6'], [100, 'S3', 'p0']],
{'p0': 100, 'p1': 300, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 16, 'p1': 6, 'p2': 19, 'p3': 17, 'p4': 8, 'p5': 0, 'p6': 10}],
{'final': {'S1': 'p3', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [1, 2, 4], 'total': 42}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p4'], [50, 'S1', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 13, 'p1': 27, 'p2': 28, 'p3': 1, 'p4': 11, 'p5': 10, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 68}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p4']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 13, 'p1': 5, 'p2': 1, 'p3': 4, 'p4': 17, 'p5': 29, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 19}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p5'], [150, 'S3', 'p5'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 15, 'p1': 17, 'p2': 18, 'p3': 0, 'p4': 9, 'p5': 13, 'p6': 21}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 46}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S1', 'p4'], [100, 'S2', 'p2'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 7, 'p1': 21, 'p2': 11, 'p3': 3, 'p4': 8, 'p5': 13, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 39}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p0'], [50, 'S2', 'p3'], [100, 'S1', 'p2'], [100, 'S3', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 30, 'p2': 12, 'p3': 13, 'p4': 20, 'p5': 16, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p6'}, 'rejected': [0, 2], 'total': 54})]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: outgoing player lock | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 35} | Passed |
| partial repair probe: outgoing player lock | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 42} | Passed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [0, 1, 2, 4], 'total': 47} | Passed |
| normal control 1 | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [], 'total': 64} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 56} | Passed |
| normal control 3 | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | {'final': {'S1': 'p0', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 52} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 47} | Passed |
SHA-256 / cdcc4f1bcb112ad58785beddb6f56a8808e140d5c051ea312eb87d12a1a551c4
Verification & scope
A deterministic toy scoring contract stipulated for this example; it is not the rulebook of any real fantasy platform. 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:35.994876+00:00.
Case digest / ceb712e8ddcb04fb5e506954dc14205626dbb52b5a6d5e353c9dcc83b8c7a724