FA-82971 / Go territory scoring / Open access
Columns after H are shifted because I is not skipped · case 01
J10 is parsed one column too far right and I5 is accepted.
ROOT CAUSE
The column alphabet includes the letter I.
VERIFIED REPAIR
Use the Go column alphabet without I.
Unsuccessful approach: Mapping I to J accepts the invalid letter I as a J alias.
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 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
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, 'I5'], 'invalid'], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'A9'], [0, 0]], [[19, 'I5'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'I5'], 'invalid'], [[25, 'I5'], 'invalid']], [[[9, 'I5'], 'invalid'], [[9, 'Y25'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'N13'], [0, 12]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'PASS'], 'pass'], [[19, 'J10'], [9, 8]]], [[[13, ' Pass'], 'pass'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[19, 'I5'], 'invalid'], [[19, 'O3'], [16, 13]]]]
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 | [4, 8] | invalid | Failed |
| 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 | [0, 0] | [0, 0] | Passed |
| vertex case 7 | [14, 8] | invalid | Failed |
SHA-256 / 34dbae451405ae149b88e82931ea3a4511cc667d65ac181c0425737c4a826ea5
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] == 'I':
t = 'J' + t[1:]
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, 'I5'], 'invalid'], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'A9'], [0, 0]], [[19, 'I5'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'I5'], 'invalid'], [[25, 'I5'], 'invalid']], [[[9, 'I5'], 'invalid'], [[9, 'Y25'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'N13'], [0, 12]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'PASS'], 'pass'], [[19, 'J10'], [9, 8]]], [[[13, ' Pass'], 'pass'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[19, 'I5'], 'invalid'], [[19, 'O3'], [16, 13]]]]
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 | [4, 8] | invalid | Failed |
| 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 | [0, 0] | [0, 0] | Passed |
| vertex case 7 | [14, 8] | invalid | Failed |
SHA-256 / a2288d88bb312a47c1be6e72e1f4f1024b2c73e865b8ab415453d3695d12b737
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, 'I5'], 'invalid'], [[9, 'pass'], 'pass'], [[9, 'PASS'], 'pass'], [[9, ' Pass'], 'pass'], [[9, 'Z1'], 'invalid'], [[9, 'A0'], 'invalid'], [[9, 'A9'], [0, 0]], [[19, 'I5'], 'invalid']], [[[9, 'A10'], 'invalid'], [[9, 'K1'], 'invalid'], [[9, 'O3'], 'invalid'], [[9, 'Q16'], 'invalid'], [[9, 'X'], 'invalid'], [[9, ''], 'invalid'], [[13, 'I5'], 'invalid'], [[25, 'I5'], 'invalid']], [[[9, 'I5'], 'invalid'], [[9, 'Y25'], 'invalid'], [[9, 'N13'], 'invalid'], [[9, 'M9'], 'invalid'], [[13, 'D4'], [9, 3]], [[13, 'd4'], [9, 3]], [[13, ' D4 '], [9, 3]], [[13, 'N13'], [0, 12]]], [[[13, 'A1'], [12, 0]], [[13, 'T19'], 'invalid'], [[13, 'J10'], [3, 8]], [[13, 'I5'], 'invalid'], [[13, 'H8'], [5, 7]], [[13, 'pass'], 'pass'], [[13, 'PASS'], 'pass'], [[19, 'J10'], [9, 8]]], [[[13, ' Pass'], 'pass'], [[13, 'Z1'], 'invalid'], [[13, 'A0'], 'invalid'], [[13, 'A13'], [0, 0]], [[13, 'A14'], 'invalid'], [[13, 'K1'], [12, 9]], [[19, 'I5'], 'invalid'], [[19, 'O3'], [16, 13]]]]
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 | invalid | invalid | 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 | [0, 0] | [0, 0] | Passed |
| vertex case 7 | invalid | invalid | Passed |
SHA-256 / 0d281dc3dc8312afa2351908c2811c01644fb06f465737e2b99e9c977896f957
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.219001+00:00.
Case digest / 26efccf3215701aac0a4683eca1d241f031efd230cf4f13439cabb11a3e8fdf7