FA-84961 / Fantasy sports scoring / Open access
Swap submitted at kickoff second accepted · case 01
A swap timestamped exactly at kickoff moves a player whose game has started.
ROOT CAUSE
Lock checks use strict less-than, treating the kickoff instant as still open.
VERIFIED REPAIR
Treat a player as locked when kickoff <= swap time.
Unsuccessful approach: Fixing only the incoming check still lets a starter be benched at his kickoff instant.
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[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: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p3'], [250, 'S1', 'p3'], [300, 'S1', 'p6'], [150, 'S2', 'p5'], [100, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 4, 'p1': 23, 'p2': 5, 'p3': 27, 'p4': 14, 'p5': 1, 'p6': 14}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p4'], [50, 'S1', 'p1'], [150, 'S2', 'p1'], [150, 'S1', 'p0'], [250, 'S2', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 13, 'p1': 20, 'p2': 4, 'p3': 9, 'p4': 6, 'p5': 30, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p4']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 15, 'p1': 17, 'p2': 25, 'p3': 10, 'p4': 3, 'p5': 23, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [50, 'S2', 'p0'], [250, 'S1', 'p5'], [100, 'S2', 'p3'], [150, 'S1', 'p5']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 17, 'p1': 26, 'p2': 13, 'p3': 22, 'p4': 24, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S1', 'p1']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 1, 'p1': 20, 'p2': 24, 'p3': 18, 'p4': 28, 'p5': 21, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p3'], [50, 'S3', 'p6'], [100, 'S1', 'p4'], [250, 'S1', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 100},
{'p0': 27, 'p1': 6, 'p2': 28, 'p3': 2, 'p4': 13, 'p5': 22, 'p6': 29}],
{'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [150, 'S3', 'p1'], [200, 'S2', 'p2'], [200, 'S2', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 16, 'p2': 18, 'p3': 10, 'p4': 17, 'p5': 30, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p6'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 12, 'p2': 4, 'p3': 3, 'p4': 16, 'p5': 17, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 27}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p6'], [250, 'S3', 'p2'], [250, 'S3', 'p2'], [100, 'S2', 'p5'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 100},
{'p0': 5, 'p1': 5, 'p2': 1, 'p3': 16, 'p4': 28, 'p5': 11, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 11}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p1'], [100, 'S1', 'p6'], [200, 'S1', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 30, 'p1': 29, 'p2': 28, 'p3': 25, 'p4': 16, 'p5': 5, 'p6': 23}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 87}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p6'], [300, 'S3', 'p1'], [50, 'S3', 'p0'], [300, 'S3', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 30, 'p2': 18, 'p3': 14, 'p4': 1, 'p5': 19, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p2'], [150, 'S3', 'p5'], [100, 'S1', 'p2'], [250, 'S2', 'p3'], [150, 'S1', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 30, 'p1': 12, 'p2': 11, 'p3': 4, 'p4': 18, 'p5': 7, 'p6': 12}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 35}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 17, 'p1': 15, 'p2': 21, 'p3': 8, 'p4': 28, 'p5': 19, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 11, 'p2': 5, 'p3': 17, 'p4': 27, 'p5': 9, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [], 'total': 50})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S2', 'p3'], [100, 'S2', 'p4'], [250, 'S1', 'p6'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 16, 'p2': 30, 'p3': 7, 'p4': 10, 'p5': 4, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2, 3], 'total': 65}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p3'], [100, 'S3', 'p3']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 21, 'p1': 11, 'p2': 6, 'p3': 20, 'p4': 0, 'p5': 5, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p5'], [150, 'S3', 'p1'], [150, 'S2', 'p3']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 9, 'p1': 1, 'p2': 8, 'p3': 25, 'p4': 27, 'p5': 20, 'p6': 16}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 42}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5'], [200, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 4, 'p1': 15, 'p2': 14, 'p3': 1, 'p4': 12, 'p5': 13, 'p6': 0}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 32}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p3'], [300, 'S3', 'p4'], [150, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 21, 'p2': 26, 'p3': 13, 'p4': 18, 'p5': 11, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [0, 1], 'total': 39}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p6'], [250, 'S3', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 8, 'p1': 21, 'p2': 0, 'p3': 23, 'p4': 27, 'p5': 6, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 29}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p3'], [50, 'S2', 'p4'], [150, 'S1', 'p6'], [50, 'S2', 'p4'], [200, 'S2', 'p2']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 9, 'p1': 23, 'p2': 1, 'p3': 6, 'p4': 23, 'p5': 4, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 3, 4], 'total': 27})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 300},
{'p0': 24, 'p1': 0, 'p2': 19, 'p3': 24, 'p4': 24, 'p5': 10, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 43}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S2', 'p1'], [50, 'S2', 'p3'], [50, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 29, 'p1': 23, 'p2': 1, 'p3': 0, 'p4': 8, 'p5': 11, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p5'}, 'rejected': [0], 'total': 40}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p5'], [300, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 29, 'p1': 22, 'p2': 1, 'p3': 1, 'p4': 14, 'p5': 20, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 52}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p2']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 26, 'p1': 29, 'p2': 26, 'p3': 22, 'p4': 24, 'p5': 17, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 81}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p2'], [100, 'S2', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 7, 'p2': 23, 'p3': 21, 'p4': 18, 'p5': 27, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p2'], [200, 'S1', 'p0'], [150, 'S2', 'p5'], [200, 'S2', 'p6'], [300, 'S2', 'p4']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 19, 'p1': 30, 'p2': 17, 'p3': 11, 'p4': 4, 'p5': 4, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 66}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [250, 'S3', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 22, 'p1': 27, 'p2': 8, 'p3': 9, 'p4': 2, 'p5': 2, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 57})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p1'], [50, 'S3', 'p2'], [100, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 100, 'p6': 100},
{'p0': 30, 'p1': 8, 'p2': 30, 'p3': 21, 'p4': 8, 'p5': 23, 'p6': 7}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 68}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p2'], [100, 'S2', 'p0'], [100, 'S1', 'p4']],
{'p0': 100, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 23, 'p1': 24, 'p2': 14, 'p3': 15, 'p4': 9, 'p5': 13, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 61}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p1'], [250, 'S3', 'p6'], [200, 'S1', 'p0'], [200, 'S1', 'p3'], [100, 'S3', 'p0']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 18, 'p1': 21, 'p2': 28, 'p3': 20, 'p4': 19, 'p5': 5, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 67}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p1'], [150, 'S2', 'p4'], [150, 'S3', 'p2'], [200, 'S2', 'p1'], [150, 'S3', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 28, 'p1': 10, 'p2': 17, 'p3': 6, 'p4': 15, 'p5': 5, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p4'], [300, 'S2', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 13, 'p1': 13, 'p2': 14, 'p3': 4, 'p4': 18, 'p5': 3, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 40}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p4'], [300, 'S1', 'p5']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 6, 'p1': 27, 'p2': 26, 'p3': 14, 'p4': 4, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 59}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p2'], [50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 29, 'p2': 1, 'p3': 4, 'p4': 21, 'p5': 5, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 33})]]
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: kickoff instant lock | {'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 3, 4], 'total': 42} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32} | Failed |
| partial repair probe: kickoff instant lock | {'final': {'S1': 'p4', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2, 3], 'total': 40} | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47} | Failed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p4'}, 'rejected': [], 'total': 35} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57} | Failed |
| normal control 1 | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | Passed |
| normal control 3 | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | Passed |
SHA-256 / 2c6d9e56333cdc79a3c8edad64f92e24e976aacc87d40827339959afbf771850
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 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: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p3'], [250, 'S1', 'p3'], [300, 'S1', 'p6'], [150, 'S2', 'p5'], [100, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 4, 'p1': 23, 'p2': 5, 'p3': 27, 'p4': 14, 'p5': 1, 'p6': 14}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p4'], [50, 'S1', 'p1'], [150, 'S2', 'p1'], [150, 'S1', 'p0'], [250, 'S2', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 13, 'p1': 20, 'p2': 4, 'p3': 9, 'p4': 6, 'p5': 30, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p4']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 15, 'p1': 17, 'p2': 25, 'p3': 10, 'p4': 3, 'p5': 23, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [50, 'S2', 'p0'], [250, 'S1', 'p5'], [100, 'S2', 'p3'], [150, 'S1', 'p5']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 17, 'p1': 26, 'p2': 13, 'p3': 22, 'p4': 24, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S1', 'p1']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 1, 'p1': 20, 'p2': 24, 'p3': 18, 'p4': 28, 'p5': 21, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p3'], [50, 'S3', 'p6'], [100, 'S1', 'p4'], [250, 'S1', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 100},
{'p0': 27, 'p1': 6, 'p2': 28, 'p3': 2, 'p4': 13, 'p5': 22, 'p6': 29}],
{'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [150, 'S3', 'p1'], [200, 'S2', 'p2'], [200, 'S2', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 16, 'p2': 18, 'p3': 10, 'p4': 17, 'p5': 30, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p6'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 12, 'p2': 4, 'p3': 3, 'p4': 16, 'p5': 17, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 27}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p6'], [250, 'S3', 'p2'], [250, 'S3', 'p2'], [100, 'S2', 'p5'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 100},
{'p0': 5, 'p1': 5, 'p2': 1, 'p3': 16, 'p4': 28, 'p5': 11, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 11}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p1'], [100, 'S1', 'p6'], [200, 'S1', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 30, 'p1': 29, 'p2': 28, 'p3': 25, 'p4': 16, 'p5': 5, 'p6': 23}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 87}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p6'], [300, 'S3', 'p1'], [50, 'S3', 'p0'], [300, 'S3', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 30, 'p2': 18, 'p3': 14, 'p4': 1, 'p5': 19, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p2'], [150, 'S3', 'p5'], [100, 'S1', 'p2'], [250, 'S2', 'p3'], [150, 'S1', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 30, 'p1': 12, 'p2': 11, 'p3': 4, 'p4': 18, 'p5': 7, 'p6': 12}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 35}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 17, 'p1': 15, 'p2': 21, 'p3': 8, 'p4': 28, 'p5': 19, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 11, 'p2': 5, 'p3': 17, 'p4': 27, 'p5': 9, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [], 'total': 50})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S2', 'p3'], [100, 'S2', 'p4'], [250, 'S1', 'p6'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 16, 'p2': 30, 'p3': 7, 'p4': 10, 'p5': 4, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2, 3], 'total': 65}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p3'], [100, 'S3', 'p3']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 21, 'p1': 11, 'p2': 6, 'p3': 20, 'p4': 0, 'p5': 5, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p5'], [150, 'S3', 'p1'], [150, 'S2', 'p3']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 9, 'p1': 1, 'p2': 8, 'p3': 25, 'p4': 27, 'p5': 20, 'p6': 16}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 42}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5'], [200, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 4, 'p1': 15, 'p2': 14, 'p3': 1, 'p4': 12, 'p5': 13, 'p6': 0}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 32}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p3'], [300, 'S3', 'p4'], [150, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 21, 'p2': 26, 'p3': 13, 'p4': 18, 'p5': 11, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [0, 1], 'total': 39}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p6'], [250, 'S3', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 8, 'p1': 21, 'p2': 0, 'p3': 23, 'p4': 27, 'p5': 6, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 29}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p3'], [50, 'S2', 'p4'], [150, 'S1', 'p6'], [50, 'S2', 'p4'], [200, 'S2', 'p2']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 9, 'p1': 23, 'p2': 1, 'p3': 6, 'p4': 23, 'p5': 4, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 3, 4], 'total': 27})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 300},
{'p0': 24, 'p1': 0, 'p2': 19, 'p3': 24, 'p4': 24, 'p5': 10, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 43}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S2', 'p1'], [50, 'S2', 'p3'], [50, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 29, 'p1': 23, 'p2': 1, 'p3': 0, 'p4': 8, 'p5': 11, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p5'}, 'rejected': [0], 'total': 40}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p5'], [300, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 29, 'p1': 22, 'p2': 1, 'p3': 1, 'p4': 14, 'p5': 20, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 52}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p2']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 26, 'p1': 29, 'p2': 26, 'p3': 22, 'p4': 24, 'p5': 17, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 81}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p2'], [100, 'S2', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 7, 'p2': 23, 'p3': 21, 'p4': 18, 'p5': 27, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p2'], [200, 'S1', 'p0'], [150, 'S2', 'p5'], [200, 'S2', 'p6'], [300, 'S2', 'p4']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 19, 'p1': 30, 'p2': 17, 'p3': 11, 'p4': 4, 'p5': 4, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 66}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [250, 'S3', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 22, 'p1': 27, 'p2': 8, 'p3': 9, 'p4': 2, 'p5': 2, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 57})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p1'], [50, 'S3', 'p2'], [100, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 100, 'p6': 100},
{'p0': 30, 'p1': 8, 'p2': 30, 'p3': 21, 'p4': 8, 'p5': 23, 'p6': 7}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 68}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p2'], [100, 'S2', 'p0'], [100, 'S1', 'p4']],
{'p0': 100, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 23, 'p1': 24, 'p2': 14, 'p3': 15, 'p4': 9, 'p5': 13, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 61}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p1'], [250, 'S3', 'p6'], [200, 'S1', 'p0'], [200, 'S1', 'p3'], [100, 'S3', 'p0']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 18, 'p1': 21, 'p2': 28, 'p3': 20, 'p4': 19, 'p5': 5, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 67}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p1'], [150, 'S2', 'p4'], [150, 'S3', 'p2'], [200, 'S2', 'p1'], [150, 'S3', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 28, 'p1': 10, 'p2': 17, 'p3': 6, 'p4': 15, 'p5': 5, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p4'], [300, 'S2', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 13, 'p1': 13, 'p2': 14, 'p3': 4, 'p4': 18, 'p5': 3, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 40}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p4'], [300, 'S1', 'p5']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 6, 'p1': 27, 'p2': 26, 'p3': 14, 'p4': 4, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 59}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p2'], [50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 29, 'p2': 1, 'p3': 4, 'p4': 21, 'p5': 5, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 33})]]
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: kickoff instant lock | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32} | Passed |
| partial repair probe: kickoff instant lock | {'final': {'S1': 'p4', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [1, 2, 3], 'total': 40} | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47} | Failed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p4'}, 'rejected': [], 'total': 35} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57} | Failed |
| normal control 1 | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | Passed |
| normal control 3 | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | Passed |
SHA-256 / ebee2235b4fbe1e6b838c46dbb6a9c2b281c7c69391c245bb17a1266ef210126
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: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S3', 'p3'], [250, 'S1', 'p3'], [300, 'S1', 'p6'], [150, 'S2', 'p5'], [100, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 4, 'p1': 23, 'p2': 5, 'p3': 27, 'p4': 14, 'p5': 1, 'p6': 14}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S1', 'p4'], [50, 'S1', 'p1'], [150, 'S2', 'p1'], [150, 'S1', 'p0'], [250, 'S2', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 13, 'p1': 20, 'p2': 4, 'p3': 9, 'p4': 6, 'p5': 30, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p4']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 15, 'p1': 17, 'p2': 25, 'p3': 10, 'p4': 3, 'p5': 23, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [50, 'S2', 'p0'], [250, 'S1', 'p5'], [100, 'S2', 'p3'], [150, 'S1', 'p5']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 200},
{'p0': 17, 'p1': 26, 'p2': 13, 'p3': 22, 'p4': 24, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [300, 'S1', 'p1']],
{'p0': 300, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 1, 'p1': 20, 'p2': 24, 'p3': 18, 'p4': 28, 'p5': 21, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[300, 'S2', 'p3'], [50, 'S3', 'p6'], [100, 'S1', 'p4'], [250, 'S1', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 100},
{'p0': 27, 'p1': 6, 'p2': 28, 'p3': 2, 'p4': 13, 'p5': 22, 'p6': 29}],
{'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S2', 'p6'], [150, 'S3', 'p1'], [200, 'S2', 'p2'], [200, 'S2', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 16, 'p2': 18, 'p3': 10, 'p4': 17, 'p5': 30, 'p6': 24}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S3', 'p6'], [200, 'S3', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 12, 'p2': 4, 'p3': 3, 'p4': 16, 'p5': 17, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 27}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[100, 'S1', 'p6'], [250, 'S3', 'p2'], [250, 'S3', 'p2'], [100, 'S2', 'p5'], [300, 'S2', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 100},
{'p0': 5, 'p1': 5, 'p2': 1, 'p3': 16, 'p4': 28, 'p5': 11, 'p6': 4}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 11}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S2', 'p1'], [100, 'S1', 'p6'], [200, 'S1', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 30, 'p1': 29, 'p2': 28, 'p3': 25, 'p4': 16, 'p5': 5, 'p6': 23}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 87}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p6'], [300, 'S3', 'p1'], [50, 'S3', 'p0'], [300, 'S3', 'p5'], [200, 'S2', 'p1']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 30, 'p2': 18, 'p3': 14, 'p4': 1, 'p5': 19, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p2'], [150, 'S3', 'p5'], [100, 'S1', 'p2'], [250, 'S2', 'p3'], [150, 'S1', 'p6']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 100, 'p6': 300},
{'p0': 30, 'p1': 12, 'p2': 11, 'p3': 4, 'p4': 18, 'p5': 7, 'p6': 12}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 35}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p0']],
{'p0': 200, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 17, 'p1': 15, 'p2': 21, 'p3': 8, 'p4': 28, 'p5': 19, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 53}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p3']],
{'p0': 100, 'p1': 300, 'p2': 100, 'p3': 100, 'p4': 200, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 11, 'p2': 5, 'p3': 17, 'p4': 27, 'p5': 9, 'p6': 18}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [], 'total': 50})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[50, 'S2', 'p3'], [100, 'S2', 'p4'], [250, 'S1', 'p6'], [200, 'S3', 'p0']],
{'p0': 300, 'p1': 100, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 28, 'p1': 16, 'p2': 30, 'p3': 7, 'p4': 10, 'p5': 4, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [1, 2, 3], 'total': 65}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p3'], [100, 'S3', 'p3']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 300, 'p5': 200, 'p6': 300},
{'p0': 21, 'p1': 11, 'p2': 6, 'p3': 20, 'p4': 0, 'p5': 5, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 38}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p5'], [150, 'S3', 'p1'], [150, 'S2', 'p3']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 9, 'p1': 1, 'p2': 8, 'p3': 25, 'p4': 27, 'p5': 20, 'p6': 16}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 42}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5'], [200, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 4, 'p1': 15, 'p2': 14, 'p3': 1, 'p4': 12, 'p5': 13, 'p6': 0}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [1], 'total': 32}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[300, 'S2', 'p3'], [300, 'S3', 'p4'], [150, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 7, 'p1': 21, 'p2': 26, 'p3': 13, 'p4': 18, 'p5': 11, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p5'}, 'rejected': [0, 1], 'total': 39}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S3', 'p6'], [250, 'S3', 'p6']],
{'p0': 100, 'p1': 300, 'p2': 300, 'p3': 300, 'p4': 100, 'p5': 300, 'p6': 100},
{'p0': 8, 'p1': 21, 'p2': 0, 'p3': 23, 'p4': 27, 'p5': 6, 'p6': 25}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 29}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S3', 'p3'], [50, 'S2', 'p4'], [150, 'S1', 'p6'], [50, 'S2', 'p4'], [200, 'S2', 'p2']],
{'p0': 200, 'p1': 300, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 300},
{'p0': 9, 'p1': 23, 'p2': 1, 'p3': 6, 'p4': 23, 'p5': 4, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p4', 'S3': 'p2'}, 'rejected': [0, 3, 4], 'total': 27})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S3', 'p5']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 300},
{'p0': 24, 'p1': 0, 'p2': 19, 'p3': 24, 'p4': 24, 'p5': 10, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 43}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[100, 'S2', 'p1'], [50, 'S2', 'p3'], [50, 'S3', 'p5']],
{'p0': 100, 'p1': 200, 'p2': 300, 'p3': 100, 'p4': 300, 'p5': 300, 'p6': 200},
{'p0': 29, 'p1': 23, 'p2': 1, 'p3': 0, 'p4': 8, 'p5': 11, 'p6': 12}],
{'final': {'S1': 'p0', 'S2': 'p3', 'S3': 'p5'}, 'rejected': [0], 'total': 40}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S1', 'p5'], [300, 'S2', 'p6'], [100, 'S3', 'p2']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 200, 'p6': 200},
{'p0': 29, 'p1': 22, 'p2': 1, 'p3': 1, 'p4': 14, 'p5': 20, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 52}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p2']],
{'p0': 200, 'p1': 100, 'p2': 100, 'p3': 300, 'p4': 300, 'p5': 100, 'p6': 300},
{'p0': 26, 'p1': 29, 'p2': 26, 'p3': 22, 'p4': 24, 'p5': 17, 'p6': 30}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 81}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p2'], [100, 'S2', 'p2']],
{'p0': 300, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 300, 'p6': 300},
{'p0': 11, 'p1': 7, 'p2': 23, 'p3': 21, 'p4': 18, 'p5': 27, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 41}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p2'], [200, 'S1', 'p0'], [150, 'S2', 'p5'], [200, 'S2', 'p6'], [300, 'S2', 'p4']],
{'p0': 300, 'p1': 100, 'p2': 200, 'p3': 100, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 19, 'p1': 30, 'p2': 17, 'p3': 11, 'p4': 4, 'p5': 4, 'p6': 9}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 66}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[250, 'S3', 'p6'], [250, 'S3', 'p1']],
{'p0': 200, 'p1': 200, 'p2': 200, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 22, 'p1': 27, 'p2': 8, 'p3': 9, 'p4': 2, 'p5': 2, 'p6': 8}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 57})],
[('regression: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[50, 'S2', 'p1'], [50, 'S3', 'p2'], [100, 'S1', 'p6']],
{'p0': 100, 'p1': 200, 'p2': 200, 'p3': 100, 'p4': 300, 'p5': 100, 'p6': 100},
{'p0': 30, 'p1': 8, 'p2': 30, 'p3': 21, 'p4': 8, 'p5': 23, 'p6': 7}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 68}),
('partial repair probe: kickoff instant lock',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p2'], [100, 'S2', 'p0'], [100, 'S1', 'p4']],
{'p0': 100, 'p1': 100, 'p2': 300, 'p3': 300, 'p4': 200, 'p5': 200, 'p6': 100},
{'p0': 23, 'p1': 24, 'p2': 14, 'p3': 15, 'p4': 9, 'p5': 13, 'p6': 15}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2], 'total': 61}),
('second regression',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[200, 'S2', 'p1'], [250, 'S3', 'p6'], [200, 'S1', 'p0'], [200, 'S1', 'p3'], [100, 'S3', 'p0']],
{'p0': 300, 'p1': 300, 'p2': 200, 'p3': 200, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 18, 'p1': 21, 'p2': 28, 'p3': 20, 'p4': 19, 'p5': 5, 'p6': 2}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 67}),
('normal control 1',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'},
[[150, 'S1', 'p1'], [150, 'S2', 'p4'], [150, 'S3', 'p2'], [200, 'S2', 'p1'], [150, 'S3', 'p5']],
{'p0': 200, 'p1': 300, 'p2': 300, 'p3': 200, 'p4': 100, 'p5': 100, 'p6': 300},
{'p0': 28, 'p1': 10, 'p2': 17, 'p3': 6, 'p4': 15, 'p5': 5, 'p6': 26}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 55}),
('normal control 2',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[150, 'S2', 'p4'], [300, 'S2', 'p2']],
{'p0': 100, 'p1': 200, 'p2': 100, 'p3': 100, 'p4': 100, 'p5': 100, 'p6': 200},
{'p0': 13, 'p1': 13, 'p2': 14, 'p3': 4, 'p4': 18, 'p5': 3, 'p6': 29}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 40}),
('normal control 3',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S2', 'p4'], [300, 'S1', 'p5']],
{'p0': 200, 'p1': 100, 'p2': 200, 'p3': 300, 'p4': 100, 'p5': 200, 'p6': 100},
{'p0': 6, 'p1': 27, 'p2': 26, 'p3': 14, 'p4': 4, 'p5': 24, 'p6': 3}],
{'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 59}),
('normal control 4',
[{'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, [[200, 'S3', 'p2'], [50, 'S1', 'p6']],
{'p0': 300, 'p1': 100, 'p2': 100, 'p3': 200, 'p4': 200, 'p5': 300, 'p6': 200},
{'p0': 12, 'p1': 29, 'p2': 1, 'p3': 4, 'p4': 21, 'p5': 5, 'p6': 3}],
{'final': {'S1': 'p6', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 33})]]
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: kickoff instant lock | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 32} | Passed |
| partial repair probe: kickoff instant lock | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47} | {'final': {'S1': 'p0', 'S2': 'p5', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3], 'total': 47} | Passed |
| second regression | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0], 'total': 57} | Passed |
| normal control 1 | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | {'final': {'S1': 'p5', 'S2': 'p6', 'S3': 'p2'}, 'rejected': [1, 2], 'total': 40} | Passed |
| normal control 2 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1], 'total': 45} | Passed |
| normal control 3 | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | {'final': {'S1': 'p2', 'S2': 'p1', 'S3': 'p6'}, 'rejected': [0], 'total': 63} | Passed |
| normal control 4 | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | {'final': {'S1': 'p0', 'S2': 'p1', 'S3': 'p2'}, 'rejected': [0, 1, 2, 3, 4], 'total': 45} | Passed |
SHA-256 / 4b85b21789820c7fed29a433f2da82533877604b0cfce4c5946c92f33f1c0820
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.962288+00:00.
Case digest / eaa584f57734a296279974f53b891832ce0871a2ecabb0de3b7cbb6389788883