FA-82986 / Go territory scoring / Open access
Column one past the board edge or row zero is accepted · case 01
Vertices outside the board are converted to coordinates.
ROOT CAUSE
The column bound uses > instead of >=.
VERIFIED REPAIR
Reject col >= size and rows outside 1..size.
Unsuccessful approach: Dropping the num < 1 test turns row 0 into a row index equal to size.
Case contract
Input [size, text]. Case-insensitive, surrounding blanks ignored; "pass" -> "pass". Column letters A..Z skipping I; row numbers count from 1 at the bottom. Return [row_from_top, col] or "invalid".
Why this case matters
Go servers and scoring tools compute this value automatically; a wrong answer changes a game result.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
size, text = x
t = text.strip().upper()
if t == 'PASS':
return 'pass'
if len(t) < 2 or not t[1:].isdigit():
return 'invalid'
letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
if t[0] not in letters:
return 'invalid'
col = letters.index(t[0])
num = int(t[1:])
if col > size or num < 1 or num > size:
return 'invalid'
return [size - num, col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("vertex case %d" % i, 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 |
|---|---|---|---|
| vertex case 0 | [1, 7] | [1, 7] | Passed |
| vertex case 1 | pass | pass | Passed |
| vertex case 2 | pass | pass | Passed |
| vertex case 3 | pass | pass | Passed |
| vertex case 4 | invalid | invalid | Passed |
| vertex case 5 | invalid | invalid | Passed |
| vertex case 6 | [8, 9] | invalid | Failed |
| vertex case 7 | invalid | invalid | Passed |
SHA-256 / 17ecb1d002f42834f666a57be5056d99547c819319d989c691926c8297117dc4
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
size, text = x
t = text.strip().upper()
if t == 'PASS':
return 'pass'
if len(t) < 2 or not t[1:].isdigit():
return 'invalid'
letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
if t[0] not in letters:
return 'invalid'
col = letters.index(t[0])
num = int(t[1:])
if col >= size or num > size:
return 'invalid'
return [size - num, col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("vertex case %d" % i, 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 |
|---|---|---|---|
| vertex case 0 | [1, 7] | [1, 7] | Passed |
| vertex case 1 | pass | pass | Passed |
| vertex case 2 | pass | pass | Passed |
| vertex case 3 | pass | pass | Passed |
| vertex case 4 | invalid | invalid | Passed |
| vertex case 5 | [9, 0] | invalid | Failed |
| vertex case 6 | invalid | invalid | Passed |
| vertex case 7 | [19, 0] | invalid | Failed |
SHA-256 / 22bb2d770680d41c0b9ec3c4d373b6ac06bedb1ab23962c67341870a5fd98921
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
size, text = x
t = text.strip().upper()
if t == 'PASS':
return 'pass'
if len(t) < 2 or not t[1:].isdigit():
return 'invalid'
letters = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
if t[0] not in letters:
return 'invalid'
col = letters.index(t[0])
num = int(t[1:])
if col >= size or num < 1 or num > size:
return 'invalid'
return [size - num, col]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[9, 'H8'], [1, 7]], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[19, 'A0'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'O3'], 'invalid'], [[25, 'A0'], 'invalid']], [[[9, 'A0'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'A1'], [12, 0]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'A0'], 'invalid'], [[13, 'O3'], 'invalid']], [[[9, 'K1'], 'invalid'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[13, 'O3'], 'invalid'], [[19, 'A0'], 'invalid']]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("vertex case %d" % i, 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 |
|---|---|---|---|
| vertex case 0 | [1, 7] | [1, 7] | Passed |
| vertex case 1 | pass | pass | Passed |
| vertex case 2 | pass | pass | Passed |
| vertex case 3 | pass | pass | Passed |
| vertex case 4 | invalid | invalid | Passed |
| vertex case 5 | invalid | invalid | Passed |
| vertex case 6 | invalid | invalid | Passed |
| vertex case 7 | invalid | invalid | Passed |
SHA-256 / f0e8e0c9ed5b3ba5a36297acab0d030ce6420f20ed5629be7f5a433c5c22d46e
Verification & scope
Small rectangular toy boards given as strings of B, W and dot; a bounded teaching model of one scoring or bookkeeping rule, not a complete rules engine or server implementation. 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:17.229138+00:00.
Case digest / 975e2d9d4b96b4e6d8b961b2ac01ff3515183848d45c3b0f9678119f57ce631e