{"abstract":"Estimated territory extends diagonally past the intended shape.","category":"Go territory scoring","checks":8,"contract":"Input [board, reach]. Each empty point belongs to the colour of the strictly nearest stones by Manhattan distance, provided that distance <= reach; ties between colours or no stone in reach leave it neutral. Return [black_points, white_points].","evaluation_group":"w2-go-territory-scoring-influence-estimate","failed_approach":"Taking abs of the signed sum cancels opposite offsets.","family":"w2-go-territory-scoring-influence-estimate-distance-metric","id":"FA-83271","implementations":{"attempt":{"sha256":"c23f7e6da9da4a0712b496532b0c2820d65ed9ca18202a33c03baa6785dc80bf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, reach = x\n    n = len(board)\n    m = len(board[0])\n    stones = [(i, j, board[i][j]) for i in range(n) for j in range(m) if board[i][j] != '.']\n    own = {'B': 0, 'W': 0}\n    for r in range(n):\n        for c in range(m):\n            if board[r][c] != '.':\n                continue\n            best = None\n            near = set()\n            for i, j, col in stones:\n                d = abs(i - r + j - c)\n                if d > reach:\n                    continue\n                if best is None or d < best:\n                    best = d\n                    near = {col}\n                elif d == best:\n                    near.add(col)\n            if len(near) == 1:\n                own[near.pop()] += 1\n    return [own['B'], own['W']]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 3], [4, 5]], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 1], [5, 3]], [[['BBBB', 'B..B', 'B..B', 'BBBB'], 2], [4, 0]], [[['WWW', 'W.W', 'WWW'], 3], [0, 1]], [[['B.W', '...', 'W.B'], 4], [0, 0]], [[['.B...', 'B....', '.....', '....W', '...W.'], 1], [4, 4]], [[['BW.', 'BW.', 'BW.'], 2], [0, 3]], [[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]]], [[[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]], [[['WB.B', 'B.B.', '.B..', 'B...'], 4], [9, 0]], [[['..W', '.W.', 'W..'], 1], [0, 4]], [[['B....B', '......', '..WW..', '..WW..', '......', 'B....B'], 2], [8, 8]], [[['......', '..WW..', '.....B', '.....B'], 3], [4, 14]], [[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..W.', 'B.WW', 'WBWB', 'WWW.', 'WBBW', '.WWB'], 1], [1, 3]], [[['W.WWWW', 'WBWWBW', '..WBWW', 'BW...W'], 2], [1, 2]]], [[[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['W.W.', 'WW.W', '..WB', 'WWBW'], 4], [0, 5]], [[['BW..', 'BBBW', 'W...', '.W..', '..W.', '..BW'], 1], [2, 6]], [[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['B.....', '...B.W', '....B.', 'BB.BWB'], 3], [11, 1]], [[['W..WW.', '.W....', 'WW.B..', '....W.', '..W..B'], 4], [0, 13]], [[['..WWW', '...BB', '.W...', '.BW..'], 1], [3, 5]]], [[[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['BWWBBW', 'BBWWBB', '.WW.BW', 'WW.WWB'], 2], [0, 1]], [[['BBWW', 'WBBW', 'WBBW', '..BB'], 3], [1, 1]], [[['....BB', 'B.....', 'B.....', 'B.BB..', '...B.B'], 4], [21, 0]], [[['.WBBB', 'B.BBB', 'WB...', 'BBBWW'], 1], [1, 0]], [[['WWWWWW', '.WB.B.', '.WBBB.', '.B.W.B', 'WBBW..'], 2], [2, 3]], [[['.W.B', '...W', '....', '..BB', 'B..B'], 3], [6, 4]], [[['WW..B', '..W..', '....W', 'WWW.B', 'B...W', 'WB.WB'], 4], [1, 10]]], [[[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['WWWW.B', '.WW.B.', 'W.WWBW', 'W...BW', 'B.WBBW', '..BW..'], 1], [2, 5]], [[['.B.B', 'WBW.', 'B.BB', '....', '.W.B'], 2], [4, 2]], [[['....B', '....B', 'B...W', '..B..', '...WW'], 3], [13, 2]], [[['WBB..', 'WWW.W', 'BW..W', 'W.B.B', 'W.WW.'], 4], [1, 4]], [[['WW.B.', '.W.B.', '....B', '...W.', '.W..W', 'BWBWW'], 1], [2, 5]], [[['.W.B.', '...W.', 'WW...', 'BB...'], 2], [2, 8]], [[['..W.', 'WBW.', '...W', 'B...', '.WW.', '....'], 3], [1, 10]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"estimate case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"91147dc8be2711889fe435b4d95b85faba07480f70731e9de6a2a614c14ff225","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, reach = x\n    n = len(board)\n    m = len(board[0])\n    stones = [(i, j, board[i][j]) for i in range(n) for j in range(m) if board[i][j] != '.']\n    own = {'B': 0, 'W': 0}\n    for r in range(n):\n        for c in range(m):\n            if board[r][c] != '.':\n                continue\n            best = None\n            near = set()\n            for i, j, col in stones:\n                d = max(abs(i - r), abs(j - c))\n                if d > reach:\n                    continue\n                if best is None or d < best:\n                    best = d\n                    near = {col}\n                elif d == best:\n                    near.add(col)\n            if len(near) == 1:\n                own[near.pop()] += 1\n    return [own['B'], own['W']]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 3], [4, 5]], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 1], [5, 3]], [[['BBBB', 'B..B', 'B..B', 'BBBB'], 2], [4, 0]], [[['WWW', 'W.W', 'WWW'], 3], [0, 1]], [[['B.W', '...', 'W.B'], 4], [0, 0]], [[['.B...', 'B....', '.....', '....W', '...W.'], 1], [4, 4]], [[['BW.', 'BW.', 'BW.'], 2], [0, 3]], [[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]]], [[[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]], [[['WB.B', 'B.B.', '.B..', 'B...'], 4], [9, 0]], [[['..W', '.W.', 'W..'], 1], [0, 4]], [[['B....B', '......', '..WW..', '..WW..', '......', 'B....B'], 2], [8, 8]], [[['......', '..WW..', '.....B', '.....B'], 3], [4, 14]], [[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..W.', 'B.WW', 'WBWB', 'WWW.', 'WBBW', '.WWB'], 1], [1, 3]], [[['W.WWWW', 'WBWWBW', '..WBWW', 'BW...W'], 2], [1, 2]]], [[[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['W.W.', 'WW.W', '..WB', 'WWBW'], 4], [0, 5]], [[['BW..', 'BBBW', 'W...', '.W..', '..W.', '..BW'], 1], [2, 6]], [[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['B.....', '...B.W', '....B.', 'BB.BWB'], 3], [11, 1]], [[['W..WW.', '.W....', 'WW.B..', '....W.', '..W..B'], 4], [0, 13]], [[['..WWW', '...BB', '.W...', '.BW..'], 1], [3, 5]]], [[[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['BWWBBW', 'BBWWBB', '.WW.BW', 'WW.WWB'], 2], [0, 1]], [[['BBWW', 'WBBW', 'WBBW', '..BB'], 3], [1, 1]], [[['....BB', 'B.....', 'B.....', 'B.BB..', '...B.B'], 4], [21, 0]], [[['.WBBB', 'B.BBB', 'WB...', 'BBBWW'], 1], [1, 0]], [[['WWWWWW', '.WB.B.', '.WBBB.', '.B.W.B', 'WBBW..'], 2], [2, 3]], [[['.W.B', '...W', '....', '..BB', 'B..B'], 3], [6, 4]], [[['WW..B', '..W..', '....W', 'WWW.B', 'B...W', 'WB.WB'], 4], [1, 10]]], [[[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['WWWW.B', '.WW.B.', 'W.WWBW', 'W...BW', 'B.WBBW', '..BW..'], 1], [2, 5]], [[['.B.B', 'WBW.', 'B.BB', '....', '.W.B'], 2], [4, 2]], [[['....B', '....B', 'B...W', '..B..', '...WW'], 3], [13, 2]], [[['WBB..', 'WWW.W', 'BW..W', 'W.B.B', 'W.WW.'], 4], [1, 4]], [[['WW.B.', '.W.B.', '....B', '...W.', '.W..W', 'BWBWW'], 1], [2, 5]], [[['.W.B.', '...W.', 'WW...', 'BB...'], 2], [2, 8]], [[['..W.', 'WBW.', '...W', 'B...', '.WW.', '....'], 3], [1, 10]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"estimate case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"fixed":{"sha256":"0154ef24310b0b701192a352a3b5b332e5e073660fd2ac5d2ad346350bf632cf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, reach = x\n    n = len(board)\n    m = len(board[0])\n    stones = [(i, j, board[i][j]) for i in range(n) for j in range(m) if board[i][j] != '.']\n    own = {'B': 0, 'W': 0}\n    for r in range(n):\n        for c in range(m):\n            if board[r][c] != '.':\n                continue\n            best = None\n            near = set()\n            for i, j, col in stones:\n                d = abs(i - r) + abs(j - c)\n                if d > reach:\n                    continue\n                if best is None or d < best:\n                    best = d\n                    near = {col}\n                elif d == best:\n                    near.add(col)\n            if len(near) == 1:\n                own[near.pop()] += 1\n    return [own['B'], own['W']]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['B.B.W', '.B.W.', 'B.BW.', 'BBW.W', '..W..'], 3], [4, 5]], [[['.W.B.', 'W.WB.', '.WB..', 'WB...', 'B....'], 1], [5, 3]], [[['BBBB', 'B..B', 'B..B', 'BBBB'], 2], [4, 0]], [[['WWW', 'W.W', 'WWW'], 3], [0, 1]], [[['B.W', '...', 'W.B'], 4], [0, 0]], [[['.B...', 'B....', '.....', '....W', '...W.'], 1], [4, 4]], [[['BW.', 'BW.', 'BW.'], 2], [0, 3]], [[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]]], [[[['.....', '.BBB.', '.B.B.', '.BBB.', '.....'], 3], [17, 0]], [[['WB.B', 'B.B.', '.B..', 'B...'], 4], [9, 0]], [[['..W', '.W.', 'W..'], 1], [0, 4]], [[['B....B', '......', '..WW..', '..WW..', '......', 'B....B'], 2], [8, 8]], [[['......', '..WW..', '.....B', '.....B'], 3], [4, 14]], [[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..W.', 'B.WW', 'WBWB', 'WWW.', 'WBBW', '.WWB'], 1], [1, 3]], [[['W.WWWW', 'WBWWBW', '..WBWW', 'BW...W'], 2], [1, 2]]], [[[['W.W...', 'W...B.', 'BB....', 'W.....', 'W.....', 'WWWW..'], 4], [10, 11]], [[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['W.W.', 'WW.W', '..WB', 'WWBW'], 4], [0, 5]], [[['BW..', 'BBBW', 'W...', '.W..', '..W.', '..BW'], 1], [2, 6]], [[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['B.....', '...B.W', '....B.', 'BB.BWB'], 3], [11, 1]], [[['W..WW.', '.W....', 'WW.B..', '....W.', '..W..B'], 4], [0, 13]], [[['..WWW', '...BB', '.W...', '.BW..'], 1], [3, 5]]], [[[['..BBW', 'BB.B.', 'B.BWB', 'W.WWB', 'W.WBW', '.BBB.'], 3], [4, 1]], [[['BWWBBW', 'BBWWBB', '.WW.BW', 'WW.WWB'], 2], [0, 1]], [[['BBWW', 'WBBW', 'WBBW', '..BB'], 3], [1, 1]], [[['....BB', 'B.....', 'B.....', 'B.BB..', '...B.B'], 4], [21, 0]], [[['.WBBB', 'B.BBB', 'WB...', 'BBBWW'], 1], [1, 0]], [[['WWWWWW', '.WB.B.', '.WBBB.', '.B.W.B', 'WBBW..'], 2], [2, 3]], [[['.W.B', '...W', '....', '..BB', 'B..B'], 3], [6, 4]], [[['WW..B', '..W..', '....W', 'WWW.B', 'B...W', 'WB.WB'], 4], [1, 10]]], [[[['....B.', '.....B', 'B.W.B.', '.B.BBW'], 2], [6, 1]], [[['WWWW.B', '.WW.B.', 'W.WWBW', 'W...BW', 'B.WBBW', '..BW..'], 1], [2, 5]], [[['.B.B', 'WBW.', 'B.BB', '....', '.W.B'], 2], [4, 2]], [[['....B', '....B', 'B...W', '..B..', '...WW'], 3], [13, 2]], [[['WBB..', 'WWW.W', 'BW..W', 'W.B.B', 'W.WW.'], 4], [1, 4]], [[['WW.B.', '.W.B.', '....B', '...W.', '.W..W', 'BWBWW'], 1], [2, 5]], [[['.W.B.', '...W.', 'WW...', 'BB...'], 2], [2, 8]], [[['..W.', 'WBW.', '...W', 'B...', '.WW.', '....'], 3], [1, 10]]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"estimate case %d\" % i, solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-go-territory-scoring-influence-estimate-distance-metric","generated_at":"2026-09-29T14:50:20.010015+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Go servers and scoring tools compute this value automatically; a wrong answer changes a game result.","repair":"Use |dr| + |dc|.","root_cause":"Distance uses Chebyshev max instead of Manhattan sum.","sha256":"916edc87b9f76b4a27c18d3d20b621522e8ddc32d915b8dd6d778863ad3addd7","title":"Diagonal stones count as distance one · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.047,"exit_code":1,"observations":[{"actual":[5,6],"check":"estimate case 0","expected":[4,5],"passed":false},{"actual":[5,1],"check":"estimate case 1","expected":[5,3],"passed":false},{"actual":[4,0],"check":"estimate case 2","expected":[4,0],"passed":true},{"actual":[0,1],"check":"estimate case 3","expected":[0,1],"passed":true},{"actual":[0,1],"check":"estimate case 4","expected":[0,0],"passed":false},{"actual":[4,4],"check":"estimate case 5","expected":[4,4],"passed":true},{"actual":[0,2],"check":"estimate case 6","expected":[0,3],"passed":false},{"actual":[17,0],"check":"estimate case 7","expected":[17,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"estimate case 0\", \"actual\": [5, 6], \"expected\": [4, 5], \"passed\": false}, {\"check\": \"estimate case 1\", \"actual\": [5, 1], \"expected\": [5, 3], \"passed\": false}, {\"check\": \"estimate case 2\", \"actual\": [4, 0], \"expected\": [4, 0], \"passed\": true}, {\"check\": \"estimate case 3\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"estimate case 4\", \"actual\": [0, 1], \"expected\": [0, 0], \"passed\": false}, {\"check\": \"estimate case 5\", \"actual\": [4, 4], \"expected\": [4, 4], \"passed\": true}, {\"check\": \"estimate case 6\", \"actual\": [0, 2], \"expected\": [0, 3], \"passed\": false}, {\"check\": \"estimate case 7\", \"actual\": [17, 0], \"expected\": [17, 0], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.223,"exit_code":1,"observations":[{"actual":[3,4],"check":"estimate case 0","expected":[4,5],"passed":false},{"actual":[5,1],"check":"estimate case 1","expected":[5,3],"passed":false},{"actual":[4,0],"check":"estimate case 2","expected":[4,0],"passed":true},{"actual":[0,1],"check":"estimate case 3","expected":[0,1],"passed":true},{"actual":[0,0],"check":"estimate case 4","expected":[0,0],"passed":true},{"actual":[6,6],"check":"estimate case 5","expected":[4,4],"passed":false},{"actual":[0,3],"check":"estimate case 6","expected":[0,3],"passed":true},{"actual":[17,0],"check":"estimate case 7","expected":[17,0],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"estimate case 0\", \"actual\": [3, 4], \"expected\": [4, 5], \"passed\": false}, {\"check\": \"estimate case 1\", \"actual\": [5, 1], \"expected\": [5, 3], \"passed\": false}, {\"check\": \"estimate case 2\", \"actual\": [4, 0], \"expected\": [4, 0], \"passed\": true}, {\"check\": \"estimate case 3\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"estimate case 4\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"estimate case 5\", \"actual\": [6, 6], \"expected\": [4, 4], \"passed\": false}, {\"check\": \"estimate case 6\", \"actual\": [0, 3], \"expected\": [0, 3], \"passed\": true}, {\"check\": \"estimate case 7\", \"actual\": [17, 0], \"expected\": [17, 0], \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":40.965,"exit_code":0,"observations":[{"actual":[4,5],"check":"estimate case 0","expected":[4,5],"passed":true},{"actual":[5,3],"check":"estimate case 1","expected":[5,3],"passed":true},{"actual":[4,0],"check":"estimate case 2","expected":[4,0],"passed":true},{"actual":[0,1],"check":"estimate case 3","expected":[0,1],"passed":true},{"actual":[0,0],"check":"estimate case 4","expected":[0,0],"passed":true},{"actual":[4,4],"check":"estimate case 5","expected":[4,4],"passed":true},{"actual":[0,3],"check":"estimate case 6","expected":[0,3],"passed":true},{"actual":[17,0],"check":"estimate case 7","expected":[17,0],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"estimate case 0\", \"actual\": [4, 5], \"expected\": [4, 5], \"passed\": true}, {\"check\": \"estimate case 1\", \"actual\": [5, 3], \"expected\": [5, 3], \"passed\": true}, {\"check\": \"estimate case 2\", \"actual\": [4, 0], \"expected\": [4, 0], \"passed\": true}, {\"check\": \"estimate case 3\", \"actual\": [0, 1], \"expected\": [0, 1], \"passed\": true}, {\"check\": \"estimate case 4\", \"actual\": [0, 0], \"expected\": [0, 0], \"passed\": true}, {\"check\": \"estimate case 5\", \"actual\": [4, 4], \"expected\": [4, 4], \"passed\": true}, {\"check\": \"estimate case 6\", \"actual\": [0, 3], \"expected\": [0, 3], \"passed\": true}, {\"check\": \"estimate case 7\", \"actual\": [17, 0], \"expected\": [17, 0], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}