FA-83956 / Sports scoring and tiebreakers / Open access
Table tennis game target is wrong · case 01
An 11-9 game is not recognized as finished.
ROOT CAUSE
The target comparison requires more than 11 points.
VERIFIED REPAIR
Use max(a, b) >= 11 with a two-point lead.
Unsuccessful approach: Using the legacy 21-point target is still wrong for this contract.
Case contract
One table tennis game to 11 with a two-point lead; later rallies are ignored. Service changes after every two points; once both players have at least 10 points it changes after every point. Return [a, b, winner, None] when finished, else [a, b, None, next server].
Why this case matters
Match software must show who serves next, especially after 10-10.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rallies, first_server):
a = b = 0
for r in rallies:
if r == 'A':
a += 1
else:
b += 1
if max(a, b) > 11 and abs(a - b) >= 2:
return [a, b, r, None]
k = a + b
other = 'B' if first_server == 'A' else 'A'
if a >= 10 and b >= 10:
block = k - 10
else:
block = k // 2
return [a, b, None, first_server if block % 2 == 0 else other]
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 opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABABBB', 'B'), [12, 14, 'B', None]),
('regression: game target', ('ABBBBAABBBABBAAABBBBA', 'A'), [7, 11, 'B', None]),
('variant scenario 1', ('AAABABBABABBAB', 'A'), [7, 7, None, 'B']),
('variant scenario 2', ('ABABABABABABABABAB', 'A'), [9, 9, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABAABABBAABBBABABBAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABBBB', 'B'), [1, 4, None, 'B']),
('variant scenario 2', ('BBBBBBBBBBA', 'B'), [1, 10, None, 'A'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('AABAABBABBBBBBBAAABA', 'B'), [8, 11, 'B', None]),
('variant scenario 1', ('AAAABAA', 'B'), [6, 1, None, 'A']),
('variant scenario 2', ('BAABABAABBABB', 'B'), [6, 7, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABBB', 'B'), [11, 13, 'B', None]),
('regression: game target', ('ABABABBBBBBBBABBBAABBBBAA', 'B'), [4, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABA', 'B'), [11, 10, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'B'), [10, 10, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('BABABBAABBBBBAAAABABAABAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABB', 'B'), [10, 11, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A'])]]
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 opening server | [0, 0, None, 'A'] | [0, 0, None, 'A'] | Passed |
| boundary second point same server | [0, 1, None, 'A'] | [0, 1, None, 'A'] | Passed |
| boundary change after two points | [1, 1, None, 'B'] | [1, 1, None, 'B'] | Passed |
| boundary ten-all | [10, 10, None, 'A'] | [10, 10, None, 'A'] | Passed |
| boundary eleven-ten alternates each point | [11, 10, None, 'B'] | [11, 10, None, 'B'] | Passed |
| control eleven-nine | [11, 9, None, 'B'] | [11, 9, 'A', None] | Failed |
| regression: game target | [12, 14, 'B', None] | [12, 14, 'B', None] | Passed |
| regression: game target | [7, 12, 'B', None] | [7, 11, 'B', None] | Failed |
| variant scenario 1 | [7, 7, None, 'B'] | [7, 7, None, 'B'] | Passed |
| variant scenario 2 | [9, 9, None, 'B'] | [9, 9, None, 'B'] | Passed |
SHA-256 / 0c02426d4f556cd0315d69d148ce10fb2d5936782af5778f8684687b7016941f
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rallies, first_server):
a = b = 0
for r in rallies:
if r == 'A':
a += 1
else:
b += 1
if max(a, b) >= 21 and abs(a - b) >= 2:
return [a, b, r, None]
k = a + b
other = 'B' if first_server == 'A' else 'A'
if a >= 10 and b >= 10:
block = k - 10
else:
block = k // 2
return [a, b, None, first_server if block % 2 == 0 else other]
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 opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABABBB', 'B'), [12, 14, 'B', None]),
('regression: game target', ('ABBBBAABBBABBAAABBBBA', 'A'), [7, 11, 'B', None]),
('variant scenario 1', ('AAABABBABABBAB', 'A'), [7, 7, None, 'B']),
('variant scenario 2', ('ABABABABABABABABAB', 'A'), [9, 9, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABAABABBAABBBABABBAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABBBB', 'B'), [1, 4, None, 'B']),
('variant scenario 2', ('BBBBBBBBBBA', 'B'), [1, 10, None, 'A'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('AABAABBABBBBBBBAAABA', 'B'), [8, 11, 'B', None]),
('variant scenario 1', ('AAAABAA', 'B'), [6, 1, None, 'A']),
('variant scenario 2', ('BAABABAABBABB', 'B'), [6, 7, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABBB', 'B'), [11, 13, 'B', None]),
('regression: game target', ('ABABABBBBBBBBABBBAABBBBAA', 'B'), [4, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABA', 'B'), [11, 10, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'B'), [10, 10, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('BABABBAABBBBBAAAABABAABAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABB', 'B'), [10, 11, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A'])]]
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 opening server | [0, 0, None, 'A'] | [0, 0, None, 'A'] | Passed |
| boundary second point same server | [0, 1, None, 'A'] | [0, 1, None, 'A'] | Passed |
| boundary change after two points | [1, 1, None, 'B'] | [1, 1, None, 'B'] | Passed |
| boundary ten-all | [10, 10, None, 'A'] | [10, 10, None, 'A'] | Passed |
| boundary eleven-ten alternates each point | [11, 10, None, 'B'] | [11, 10, None, 'B'] | Passed |
| control eleven-nine | [11, 9, None, 'B'] | [11, 9, 'A', None] | Failed |
| regression: game target | [12, 14, None, 'B'] | [12, 14, 'B', None] | Failed |
| regression: game target | [8, 13, None, 'A'] | [7, 11, 'B', None] | Failed |
| variant scenario 1 | [7, 7, None, 'B'] | [7, 7, None, 'B'] | Passed |
| variant scenario 2 | [9, 9, None, 'B'] | [9, 9, None, 'B'] | Passed |
SHA-256 / 843f4c266402f544b89adc2f164dd3e597da1f705e091a5e666c05f1675424f1
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(rallies, first_server):
a = b = 0
for r in rallies:
if r == 'A':
a += 1
else:
b += 1
if max(a, b) >= 11 and abs(a - b) >= 2:
return [a, b, r, None]
k = a + b
other = 'B' if first_server == 'A' else 'A'
if a >= 10 and b >= 10:
block = k - 10
else:
block = k // 2
return [a, b, None, first_server if block % 2 == 0 else other]
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 opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABABBB', 'B'), [12, 14, 'B', None]),
('regression: game target', ('ABBBBAABBBABBAAABBBBA', 'A'), [7, 11, 'B', None]),
('variant scenario 1', ('AAABABBABABBAB', 'A'), [7, 7, None, 'B']),
('variant scenario 2', ('ABABABABABABABABAB', 'A'), [9, 9, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABAABABBAABBBABABBAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABBBB', 'B'), [1, 4, None, 'B']),
('variant scenario 2', ('BBBBBBBBBBA', 'B'), [1, 10, None, 'A'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('AABAABBABBBBBBBAAABA', 'B'), [8, 11, 'B', None]),
('variant scenario 1', ('AAAABAA', 'B'), [6, 1, None, 'A']),
('variant scenario 2', ('BAABABAABBABB', 'B'), [6, 7, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('ABABABABABABABABABABABBB', 'B'), [11, 13, 'B', None]),
('regression: game target', ('ABABABBBBBBBBABBBAABBBBAA', 'B'), [4, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABA', 'B'), [11, 10, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'B'), [10, 10, None, 'B'])],
[('control opening server', ('', 'A'), [0, 0, None, 'A']),
('boundary second point same server', ('B', 'A'), [0, 1, None, 'A']),
('boundary change after two points', ('BA', 'A'), [1, 1, None, 'B']),
('boundary ten-all', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A']),
('boundary eleven-ten alternates each point',
('ABABABABABABABABABABA', 'A'),
[11, 10, None, 'B']),
('control eleven-nine', ('AAAAAAAAABBBBBBBBBAA', 'B'), [11, 9, 'A', None]),
('regression: game target', ('BABABBAABBBBBAAAABABAABAA', 'B'), [9, 11, 'B', None]),
('variant scenario 1', ('ABABABABABABABABABABB', 'B'), [10, 11, None, 'A']),
('variant scenario 2', ('ABABABABABABABABABAB', 'A'), [10, 10, None, 'A'])]]
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 opening server | [0, 0, None, 'A'] | [0, 0, None, 'A'] | Passed |
| boundary second point same server | [0, 1, None, 'A'] | [0, 1, None, 'A'] | Passed |
| boundary change after two points | [1, 1, None, 'B'] | [1, 1, None, 'B'] | Passed |
| boundary ten-all | [10, 10, None, 'A'] | [10, 10, None, 'A'] | Passed |
| boundary eleven-ten alternates each point | [11, 10, None, 'B'] | [11, 10, None, 'B'] | Passed |
| control eleven-nine | [11, 9, 'A', None] | [11, 9, 'A', None] | Passed |
| regression: game target | [12, 14, 'B', None] | [12, 14, 'B', None] | Passed |
| regression: game target | [7, 11, 'B', None] | [7, 11, 'B', None] | Passed |
| variant scenario 1 | [7, 7, None, 'B'] | [7, 7, None, 'B'] | Passed |
| variant scenario 2 | [9, 9, None, 'B'] | [9, 9, None, 'B'] | Passed |
SHA-256 / ae047be6d682d3a858545e2eef419303f276cffe4097cfdf94c4d56430e1a0c1
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:26.502675+00:00.
Case digest / 3e48a6a1a559deb927d188307600c75ee192173a7aeffce49bd92420cdaffe80