FA-84021 / Sports scoring and tiebreakers / Open access
Away side credited with the home score · case 01
Away teams receive the home side goals and the wrong results.
ROOT CAUSE
The away-row tuple is built from the home perspective (hg, ag) instead of (ag, hg).
VERIFIED REPAIR
Build the away row as (away, away_goals, home_goals).
Unsuccessful approach: Using the away goals for both scored and conceded zeroes every away goal difference.
Case contract
Round-robin football table. results rows are [home, home_goals, away, away_goals]. A win is 3 points, a draw 1. Rank by points, then goal difference, then goals scored, then head-to-head points among the teams still level on all three (only matches between those teams), then team name. Return rows [team, played, points, goal_difference, goals_for].
Why this case matters
League tables drive promotion, relegation and seeding; the tiebreaker cascade order matters.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(results, teams):
table = {t: {'p': 0, 'pts': 0, 'gd': 0, 'gf': 0} for t in teams}
for h, hg, a, ag in results:
for team, f, g in ((h, hg, ag), (a, hg, ag)):
row = table[team]
row['p'] += 1
row['gf'] += f
row['gd'] += f - g
row['pts'] += 3 if f > g else (1 if f == g else 0)
def key3(t):
r = table[t]
return (r['pts'], r['gd'], r['gf'])
def h2h(t):
group = [u for u in teams if key3(u) == key3(t)]
pts = 0
for h, hg, a, ag in results:
if h in group and a in group and t in (h, a):
f, g = (hg, ag) if t == h else (ag, hg)
pts += 3 if f > g else (1 if f == g else 0)
return pts
order = sorted(teams, key=lambda t: (-key3(t)[0], -key3(t)[1], -key3(t)[2], -h2h(t), t))
return [[t, table[t]['p'], table[t]['pts'], table[t]['gd'], table[t]['gf']] for t in order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
try:
return solve(*args)
except Exception as exc:
return 'raised ' + type(exc).__name__
cases = [[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Corby', 1],
['Dover', 1, 'Ashby', 0],
['Dover', 0, 'Ashby', 1],
['Ashby', 1, 'Epsom', 1],
['Corby', 0, 'Dover', 0],
['Epsom', 0, 'Ashby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Ashby', 4, 5, 0, 2],
['Dover', 4, 5, 0, 2],
['Brent', 1, 3, 1, 1],
['Epsom', 2, 2, 0, 1],
['Corby', 3, 2, -1, 1]]),
('variant scenario 1',
([['Corby', 0, 'Brent', 1],
['Corby', 0, 'Dover', 1],
['Corby', 0, 'Dover', 2],
['Brent', 1, 'Dover', 2],
['Ashby', 1, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]]),
('variant scenario 2',
([['Brent', 1, 'Ashby', 1], ['Brent', 0, 'Ashby', 1], ['Brent', 1, 'Corby', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Corby', 0, 'Ashby', 1], ['Corby', 1, 'Ashby', 1], ['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Corby', 3, 4, 0, 2], ['Brent', 1, 0, -1, 0]]),
('variant scenario 1',
([['Ashby', 3, 'Brent', 1],
['Ashby', 1, 'Corby', 3],
['Brent', 1, 'Ashby', 1],
['Brent', 2, 'Corby', 2],
['Corby', 1, 'Ashby', 3],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 4, 7, 2, 8], ['Corby', 4, 7, 1, 7], ['Brent', 4, 2, -3, 4]]),
('variant scenario 2',
([['Ashby', 0, 'Epsom', 0],
['Epsom', 0, 'Ashby', 0],
['Epsom', 0, 'Dover', 1],
['Ashby', 1, 'Dover', 0],
['Corby', 0, 'Brent', 1],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Dover', 4, 6, 0, 2],
['Ashby', 3, 5, 1, 1],
['Epsom', 5, 5, -1, 1],
['Brent', 1, 3, 1, 1],
['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 1, 'Brent', 3],
['Ashby', 0, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Brent', 0, 'Corby', 3],
['Corby', 0, 'Ashby', 1],
['Corby', 1, 'Brent', 3]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 6, 1, 5], ['Brent', 4, 6, 0, 6], ['Ashby', 4, 6, -1, 3]]),
('variant scenario 1',
([['Ashby', 1, 'Corby', 0],
['Ashby', 1, 'Corby', 0],
['Corby', 1, 'Ashby', 1],
['Ashby', 1, 'Corby', 0],
['Corby', 0, 'Ashby', 0],
['Ashby', 1, 'Brent', 1],
['Brent', 0, 'Corby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 6, 12, 3, 5], ['Brent', 3, 5, 1, 2], ['Corby', 7, 3, -4, 1]]),
('variant scenario 2',
([['Brent', 1, 'Corby', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Corby', 1],
['Epsom', 0, 'Ashby', 0],
['Corby', 1, 'Dover', 1],
['Brent', 1, 'Corby', 0],
['Dover', 1, 'Brent', 1],
['Epsom', 0, 'Corby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 3],
['Dover', 3, 5, 1, 3],
['Epsom', 4, 3, -1, 1],
['Corby', 5, 3, -2, 2],
['Ashby', 1, 1, 0, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Ashby', 1],
['Brent', 0, 'Corby', 1],
['Dover', 1, 'Corby', 1],
['Brent', 1, 'Ashby', 1],
['Ashby', 0, 'Dover', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 5, 1, 3], ['Ashby', 4, 5, 0, 3], ['Corby', 2, 4, 1, 2], ['Brent', 3, 1, -2, 1]]),
('variant scenario 1',
([['Ashby', 2, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Corby', 2, 'Ashby', 1],
['Ashby', 2, 'Corby', 1],
['Corby', 1, 'Brent', 0],
['Corby', 1, 'Brent', 2],
['Brent', 0, 'Corby', 1],
['Corby', 1, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 5, 10, 2, 7], ['Corby', 7, 10, 0, 8], ['Brent', 4, 3, -2, 2]]),
('variant scenario 2',
([['Corby', 1, 'Dover', 1],
['Corby', 0, 'Brent', 1],
['Corby', 3, 'Dover', 3],
['Corby', 2, 'Ashby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 4, 5, 1, 6], ['Brent', 1, 3, 1, 1], ['Dover', 2, 2, 0, 4], ['Ashby', 1, 0, -2, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 0, 'Corby', 1],
['Epsom', 1, 'Dover', 0],
['Corby', 1, 'Dover', 1],
['Epsom', 1, 'Brent', 1],
['Corby', 1, 'Brent', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 1],
['Ashby', 1, 'Corby', 1],
['Dover', 1, 'Epsom', 0],
['Corby', 0, 'Brent', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Corby', 5, 8, 1, 4],
['Dover', 5, 8, 1, 4],
['Epsom', 5, 5, -1, 3],
['Ashby', 3, 4, 0, 2],
['Brent', 4, 4, -1, 2]]),
('variant scenario 1',
([['Ashby', 0, 'Brent', 2],
['Ashby', 3, 'Corby', 2],
['Brent', 0, 'Ashby', 0],
['Brent', 2, 'Corby', 2],
['Corby', 3, 'Ashby', 1],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 7, 2, 8], ['Brent', 4, 5, 1, 4], ['Ashby', 4, 4, -3, 4]]),
('variant scenario 2',
([['Epsom', 1, 'Dover', 0],
['Brent', 1, 'Epsom', 0],
['Corby', 1, 'Ashby', 1],
['Dover', 0, 'Ashby', 0],
['Epsom', 0, 'Corby', 1],
['Ashby', 0, 'Corby', 1],
['Corby', 0, 'Epsom', 1],
['Dover', 0, 'Brent', 0],
['Epsom', 0, 'Dover', 1],
['Brent', 1, 'Ashby', 0],
['Dover', 0, 'Epsom', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 2],
['Corby', 4, 7, 1, 3],
['Epsom', 6, 7, -1, 2],
['Dover', 5, 6, 0, 1],
['Ashby', 4, 2, -2, 1]])]]
for label, args, expected in cases[N - 1]:
check(label, run(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 |
|---|---|---|---|
| control single win | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 3, 2, 2]] | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]] | Failed |
| boundary draw | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | Passed |
| boundary goals scored before name | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | Passed |
| boundary head to head decides | [['Brent', 2, 6, 2, 4], ['Ashby', 2, 6, 2, 4], ['Corby', 1, 3, 1, 2], ['Dover', 1, 3, 1, 2]] | [['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]] | Failed |
| control no matches | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | Passed |
| regression: away goal orientation | [['Ashby', 4, 5, 0, 2], ['Dover', 4, 5, 0, 2], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1], ['Brent', 1, 0, -1, 0]] | [['Ashby', 4, 5, 0, 2], ['Dover', 4, 5, 0, 2], ['Brent', 1, 3, 1, 1], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1]] | Failed |
| variant scenario 1 | [['Ashby', 1, 1, 0, 1], ['Brent', 3, 1, -2, 2], ['Dover', 3, 0, -4, 1], ['Corby', 3, 0, -4, 0]] | [['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]] | Failed |
| variant scenario 2 | [['Brent', 3, 4, 0, 2], ['Corby', 1, 3, 1, 1], ['Ashby', 2, 1, -1, 1]] | [['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]] | Failed |
SHA-256 / 1c3d38d9abb279142f9eef0296dc69b6d7fc25207368c5aef3034d1182af5fff
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(results, teams):
table = {t: {'p': 0, 'pts': 0, 'gd': 0, 'gf': 0} for t in teams}
for h, hg, a, ag in results:
for team, f, g in ((h, hg, ag), (a, ag, ag)):
row = table[team]
row['p'] += 1
row['gf'] += f
row['gd'] += f - g
row['pts'] += 3 if f > g else (1 if f == g else 0)
def key3(t):
r = table[t]
return (r['pts'], r['gd'], r['gf'])
def h2h(t):
group = [u for u in teams if key3(u) == key3(t)]
pts = 0
for h, hg, a, ag in results:
if h in group and a in group and t in (h, a):
f, g = (hg, ag) if t == h else (ag, hg)
pts += 3 if f > g else (1 if f == g else 0)
return pts
order = sorted(teams, key=lambda t: (-key3(t)[0], -key3(t)[1], -key3(t)[2], -h2h(t), t))
return [[t, table[t]['p'], table[t]['pts'], table[t]['gd'], table[t]['gf']] for t in order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
try:
return solve(*args)
except Exception as exc:
return 'raised ' + type(exc).__name__
cases = [[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Corby', 1],
['Dover', 1, 'Ashby', 0],
['Dover', 0, 'Ashby', 1],
['Ashby', 1, 'Epsom', 1],
['Corby', 0, 'Dover', 0],
['Epsom', 0, 'Ashby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Ashby', 4, 5, 0, 2],
['Dover', 4, 5, 0, 2],
['Brent', 1, 3, 1, 1],
['Epsom', 2, 2, 0, 1],
['Corby', 3, 2, -1, 1]]),
('variant scenario 1',
([['Corby', 0, 'Brent', 1],
['Corby', 0, 'Dover', 1],
['Corby', 0, 'Dover', 2],
['Brent', 1, 'Dover', 2],
['Ashby', 1, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]]),
('variant scenario 2',
([['Brent', 1, 'Ashby', 1], ['Brent', 0, 'Ashby', 1], ['Brent', 1, 'Corby', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Corby', 0, 'Ashby', 1], ['Corby', 1, 'Ashby', 1], ['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Corby', 3, 4, 0, 2], ['Brent', 1, 0, -1, 0]]),
('variant scenario 1',
([['Ashby', 3, 'Brent', 1],
['Ashby', 1, 'Corby', 3],
['Brent', 1, 'Ashby', 1],
['Brent', 2, 'Corby', 2],
['Corby', 1, 'Ashby', 3],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 4, 7, 2, 8], ['Corby', 4, 7, 1, 7], ['Brent', 4, 2, -3, 4]]),
('variant scenario 2',
([['Ashby', 0, 'Epsom', 0],
['Epsom', 0, 'Ashby', 0],
['Epsom', 0, 'Dover', 1],
['Ashby', 1, 'Dover', 0],
['Corby', 0, 'Brent', 1],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Dover', 4, 6, 0, 2],
['Ashby', 3, 5, 1, 1],
['Epsom', 5, 5, -1, 1],
['Brent', 1, 3, 1, 1],
['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 1, 'Brent', 3],
['Ashby', 0, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Brent', 0, 'Corby', 3],
['Corby', 0, 'Ashby', 1],
['Corby', 1, 'Brent', 3]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 6, 1, 5], ['Brent', 4, 6, 0, 6], ['Ashby', 4, 6, -1, 3]]),
('variant scenario 1',
([['Ashby', 1, 'Corby', 0],
['Ashby', 1, 'Corby', 0],
['Corby', 1, 'Ashby', 1],
['Ashby', 1, 'Corby', 0],
['Corby', 0, 'Ashby', 0],
['Ashby', 1, 'Brent', 1],
['Brent', 0, 'Corby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 6, 12, 3, 5], ['Brent', 3, 5, 1, 2], ['Corby', 7, 3, -4, 1]]),
('variant scenario 2',
([['Brent', 1, 'Corby', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Corby', 1],
['Epsom', 0, 'Ashby', 0],
['Corby', 1, 'Dover', 1],
['Brent', 1, 'Corby', 0],
['Dover', 1, 'Brent', 1],
['Epsom', 0, 'Corby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 3],
['Dover', 3, 5, 1, 3],
['Epsom', 4, 3, -1, 1],
['Corby', 5, 3, -2, 2],
['Ashby', 1, 1, 0, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Ashby', 1],
['Brent', 0, 'Corby', 1],
['Dover', 1, 'Corby', 1],
['Brent', 1, 'Ashby', 1],
['Ashby', 0, 'Dover', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 5, 1, 3], ['Ashby', 4, 5, 0, 3], ['Corby', 2, 4, 1, 2], ['Brent', 3, 1, -2, 1]]),
('variant scenario 1',
([['Ashby', 2, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Corby', 2, 'Ashby', 1],
['Ashby', 2, 'Corby', 1],
['Corby', 1, 'Brent', 0],
['Corby', 1, 'Brent', 2],
['Brent', 0, 'Corby', 1],
['Corby', 1, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 5, 10, 2, 7], ['Corby', 7, 10, 0, 8], ['Brent', 4, 3, -2, 2]]),
('variant scenario 2',
([['Corby', 1, 'Dover', 1],
['Corby', 0, 'Brent', 1],
['Corby', 3, 'Dover', 3],
['Corby', 2, 'Ashby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 4, 5, 1, 6], ['Brent', 1, 3, 1, 1], ['Dover', 2, 2, 0, 4], ['Ashby', 1, 0, -2, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 0, 'Corby', 1],
['Epsom', 1, 'Dover', 0],
['Corby', 1, 'Dover', 1],
['Epsom', 1, 'Brent', 1],
['Corby', 1, 'Brent', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 1],
['Ashby', 1, 'Corby', 1],
['Dover', 1, 'Epsom', 0],
['Corby', 0, 'Brent', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Corby', 5, 8, 1, 4],
['Dover', 5, 8, 1, 4],
['Epsom', 5, 5, -1, 3],
['Ashby', 3, 4, 0, 2],
['Brent', 4, 4, -1, 2]]),
('variant scenario 1',
([['Ashby', 0, 'Brent', 2],
['Ashby', 3, 'Corby', 2],
['Brent', 0, 'Ashby', 0],
['Brent', 2, 'Corby', 2],
['Corby', 3, 'Ashby', 1],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 7, 2, 8], ['Brent', 4, 5, 1, 4], ['Ashby', 4, 4, -3, 4]]),
('variant scenario 2',
([['Epsom', 1, 'Dover', 0],
['Brent', 1, 'Epsom', 0],
['Corby', 1, 'Ashby', 1],
['Dover', 0, 'Ashby', 0],
['Epsom', 0, 'Corby', 1],
['Ashby', 0, 'Corby', 1],
['Corby', 0, 'Epsom', 1],
['Dover', 0, 'Brent', 0],
['Epsom', 0, 'Dover', 1],
['Brent', 1, 'Ashby', 0],
['Dover', 0, 'Epsom', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 2],
['Corby', 4, 7, 1, 3],
['Epsom', 6, 7, -1, 2],
['Dover', 5, 6, 0, 1],
['Ashby', 4, 2, -2, 1]])]]
for label, args, expected in cases[N - 1]:
check(label, run(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 |
|---|---|---|---|
| control single win | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 1, 0, 0]] | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]] | Failed |
| boundary draw | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | Passed |
| boundary goals scored before name | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | Passed |
| boundary head to head decides | [['Brent', 2, 4, 1, 3], ['Ashby', 2, 4, 1, 3], ['Corby', 1, 3, 1, 2], ['Dover', 1, 1, 0, 1]] | [['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]] | Failed |
| control no matches | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | Passed |
| regression: away goal orientation | [['Dover', 4, 5, 0, 2], ['Ashby', 4, 4, 0, 2], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1], ['Brent', 1, 1, 0, 1]] | [['Ashby', 4, 5, 0, 2], ['Dover', 4, 5, 0, 2], ['Brent', 1, 3, 1, 1], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1]] | Failed |
| variant scenario 1 | [['Dover', 3, 3, 0, 5], ['Brent', 3, 2, -1, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]] | [['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]] | Failed |
| variant scenario 2 | [['Brent', 3, 4, 0, 2], ['Ashby', 2, 2, 0, 2], ['Corby', 1, 1, 0, 0]] | [['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]] | Failed |
SHA-256 / 1f171dfc66e07cd0bc80c47c579659ef0986c47aa00be915349dd71b166d2848
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(results, teams):
table = {t: {'p': 0, 'pts': 0, 'gd': 0, 'gf': 0} for t in teams}
for h, hg, a, ag in results:
for team, f, g in ((h, hg, ag), (a, ag, hg)):
row = table[team]
row['p'] += 1
row['gf'] += f
row['gd'] += f - g
row['pts'] += 3 if f > g else (1 if f == g else 0)
def key3(t):
r = table[t]
return (r['pts'], r['gd'], r['gf'])
def h2h(t):
group = [u for u in teams if key3(u) == key3(t)]
pts = 0
for h, hg, a, ag in results:
if h in group and a in group and t in (h, a):
f, g = (hg, ag) if t == h else (ag, hg)
pts += 3 if f > g else (1 if f == g else 0)
return pts
order = sorted(teams, key=lambda t: (-key3(t)[0], -key3(t)[1], -key3(t)[2], -h2h(t), t))
return [[t, table[t]['p'], table[t]['pts'], table[t]['gd'], table[t]['gf']] for t in order]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
def run(args):
try:
return solve(*args)
except Exception as exc:
return 'raised ' + type(exc).__name__
cases = [[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Corby', 1],
['Dover', 1, 'Ashby', 0],
['Dover', 0, 'Ashby', 1],
['Ashby', 1, 'Epsom', 1],
['Corby', 0, 'Dover', 0],
['Epsom', 0, 'Ashby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Ashby', 4, 5, 0, 2],
['Dover', 4, 5, 0, 2],
['Brent', 1, 3, 1, 1],
['Epsom', 2, 2, 0, 1],
['Corby', 3, 2, -1, 1]]),
('variant scenario 1',
([['Corby', 0, 'Brent', 1],
['Corby', 0, 'Dover', 1],
['Corby', 0, 'Dover', 2],
['Brent', 1, 'Dover', 2],
['Ashby', 1, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]]),
('variant scenario 2',
([['Brent', 1, 'Ashby', 1], ['Brent', 0, 'Ashby', 1], ['Brent', 1, 'Corby', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Corby', 0, 'Ashby', 1], ['Corby', 1, 'Ashby', 1], ['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 2, 4, 1, 2], ['Corby', 3, 4, 0, 2], ['Brent', 1, 0, -1, 0]]),
('variant scenario 1',
([['Ashby', 3, 'Brent', 1],
['Ashby', 1, 'Corby', 3],
['Brent', 1, 'Ashby', 1],
['Brent', 2, 'Corby', 2],
['Corby', 1, 'Ashby', 3],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 4, 7, 2, 8], ['Corby', 4, 7, 1, 7], ['Brent', 4, 2, -3, 4]]),
('variant scenario 2',
([['Ashby', 0, 'Epsom', 0],
['Epsom', 0, 'Ashby', 0],
['Epsom', 0, 'Dover', 1],
['Ashby', 1, 'Dover', 0],
['Corby', 0, 'Brent', 1],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Dover', 4, 6, 0, 2],
['Ashby', 3, 5, 1, 1],
['Epsom', 5, 5, -1, 1],
['Brent', 1, 3, 1, 1],
['Corby', 1, 0, -1, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 1, 'Brent', 3],
['Ashby', 0, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Brent', 0, 'Corby', 3],
['Corby', 0, 'Ashby', 1],
['Corby', 1, 'Brent', 3]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 6, 1, 5], ['Brent', 4, 6, 0, 6], ['Ashby', 4, 6, -1, 3]]),
('variant scenario 1',
([['Ashby', 1, 'Corby', 0],
['Ashby', 1, 'Corby', 0],
['Corby', 1, 'Ashby', 1],
['Ashby', 1, 'Corby', 0],
['Corby', 0, 'Ashby', 0],
['Ashby', 1, 'Brent', 1],
['Brent', 0, 'Corby', 0],
['Corby', 0, 'Brent', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 6, 12, 3, 5], ['Brent', 3, 5, 1, 2], ['Corby', 7, 3, -4, 1]]),
('variant scenario 2',
([['Brent', 1, 'Corby', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Corby', 1],
['Epsom', 0, 'Ashby', 0],
['Corby', 1, 'Dover', 1],
['Brent', 1, 'Corby', 0],
['Dover', 1, 'Brent', 1],
['Epsom', 0, 'Corby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 3],
['Dover', 3, 5, 1, 3],
['Epsom', 4, 3, -1, 1],
['Corby', 5, 3, -2, 2],
['Ashby', 1, 1, 0, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Dover', 1, 'Ashby', 1],
['Brent', 0, 'Corby', 1],
['Dover', 1, 'Corby', 1],
['Brent', 1, 'Ashby', 1],
['Ashby', 0, 'Dover', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Dover', 3, 5, 1, 3], ['Ashby', 4, 5, 0, 3], ['Corby', 2, 4, 1, 2], ['Brent', 3, 1, -2, 1]]),
('variant scenario 1',
([['Ashby', 2, 'Corby', 1],
['Brent', 0, 'Ashby', 1],
['Corby', 2, 'Ashby', 1],
['Ashby', 2, 'Corby', 1],
['Corby', 1, 'Brent', 0],
['Corby', 1, 'Brent', 2],
['Brent', 0, 'Corby', 1],
['Corby', 1, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby']),
[['Ashby', 5, 10, 2, 7], ['Corby', 7, 10, 0, 8], ['Brent', 4, 3, -2, 2]]),
('variant scenario 2',
([['Corby', 1, 'Dover', 1],
['Corby', 0, 'Brent', 1],
['Corby', 3, 'Dover', 3],
['Corby', 2, 'Ashby', 0]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 4, 5, 1, 6], ['Brent', 1, 3, 1, 1], ['Dover', 2, 2, 0, 4], ['Ashby', 1, 0, -2, 0]])],
[('control single win',
([['Ashby', 2, 'Brent', 0]], ['Ashby', 'Brent']),
[['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]]),
('boundary draw',
([['Ashby', 1, 'Brent', 1]], ['Brent', 'Ashby']),
[['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]]),
('boundary goals scored before name',
([['Ashby', 1, 'Corby', 1], ['Brent', 2, 'Corby', 2]], ['Ashby', 'Brent', 'Corby']),
[['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]]),
('boundary head to head decides',
([['Brent', 2, 'Ashby', 1], ['Ashby', 2, 'Dover', 1], ['Corby', 2, 'Brent', 1]],
['Ashby', 'Brent', 'Corby', 'Dover']),
[['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]]),
('control no matches', ([], ['Corby', 'Ashby']), [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]]),
('regression: away goal orientation',
([['Ashby', 0, 'Corby', 1],
['Epsom', 1, 'Dover', 0],
['Corby', 1, 'Dover', 1],
['Epsom', 1, 'Brent', 1],
['Corby', 1, 'Brent', 0],
['Dover', 1, 'Epsom', 0],
['Epsom', 1, 'Dover', 1],
['Ashby', 1, 'Corby', 1],
['Dover', 1, 'Epsom', 0],
['Corby', 0, 'Brent', 1],
['Brent', 0, 'Ashby', 1]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Corby', 5, 8, 1, 4],
['Dover', 5, 8, 1, 4],
['Epsom', 5, 5, -1, 3],
['Ashby', 3, 4, 0, 2],
['Brent', 4, 4, -1, 2]]),
('variant scenario 1',
([['Ashby', 0, 'Brent', 2],
['Ashby', 3, 'Corby', 2],
['Brent', 0, 'Ashby', 0],
['Brent', 2, 'Corby', 2],
['Corby', 3, 'Ashby', 1],
['Corby', 1, 'Brent', 0]],
['Ashby', 'Brent', 'Corby']),
[['Corby', 4, 7, 2, 8], ['Brent', 4, 5, 1, 4], ['Ashby', 4, 4, -3, 4]]),
('variant scenario 2',
([['Epsom', 1, 'Dover', 0],
['Brent', 1, 'Epsom', 0],
['Corby', 1, 'Ashby', 1],
['Dover', 0, 'Ashby', 0],
['Epsom', 0, 'Corby', 1],
['Ashby', 0, 'Corby', 1],
['Corby', 0, 'Epsom', 1],
['Dover', 0, 'Brent', 0],
['Epsom', 0, 'Dover', 1],
['Brent', 1, 'Ashby', 0],
['Dover', 0, 'Epsom', 0]],
['Ashby', 'Brent', 'Corby', 'Dover', 'Epsom']),
[['Brent', 3, 7, 2, 2],
['Corby', 4, 7, 1, 3],
['Epsom', 6, 7, -1, 2],
['Dover', 5, 6, 0, 1],
['Ashby', 4, 2, -2, 1]])]]
for label, args, expected in cases[N - 1]:
check(label, run(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 |
|---|---|---|---|
| control single win | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]] | [['Ashby', 1, 3, 2, 2], ['Brent', 1, 0, -2, 0]] | Passed |
| boundary draw | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | [['Ashby', 1, 1, 0, 1], ['Brent', 1, 1, 0, 1]] | Passed |
| boundary goals scored before name | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | [['Corby', 2, 2, 0, 3], ['Brent', 1, 1, 0, 2], ['Ashby', 1, 1, 0, 1]] | Passed |
| boundary head to head decides | [['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]] | [['Corby', 1, 3, 1, 2], ['Brent', 2, 3, 0, 3], ['Ashby', 2, 3, 0, 3], ['Dover', 1, 0, -1, 1]] | Passed |
| control no matches | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | [['Ashby', 0, 0, 0, 0], ['Corby', 0, 0, 0, 0]] | Passed |
| regression: away goal orientation | [['Ashby', 4, 5, 0, 2], ['Dover', 4, 5, 0, 2], ['Brent', 1, 3, 1, 1], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1]] | [['Ashby', 4, 5, 0, 2], ['Dover', 4, 5, 0, 2], ['Brent', 1, 3, 1, 1], ['Epsom', 2, 2, 0, 1], ['Corby', 3, 2, -1, 1]] | Passed |
| variant scenario 1 | [['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]] | [['Dover', 3, 9, 4, 5], ['Brent', 3, 4, 0, 3], ['Ashby', 1, 1, 0, 1], ['Corby', 3, 0, -4, 0]] | Passed |
| variant scenario 2 | [['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]] | [['Ashby', 2, 4, 1, 2], ['Brent', 3, 4, 0, 2], ['Corby', 1, 0, -1, 0]] | Passed |
SHA-256 / c1248ebad95b7fedae7a09de0f6a7e41489c5245d2f59526ff56ae8542803088
Verification & scope
Stipulated, bounded toy contract stated in the contract field; not a claim of conformance with any governing body rulebook or operator house rules. 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:27.093751+00:00.
Case digest / c449ea2ce6d764ed78c13b682f67ac2cc2287e5ca64e9c9d4acb56ca5667d743