{"abstract":"Marking a white group dead raises white prisoner count instead of black.","category":"Go territory scoring","checks":8,"contract":"Input [board, dead_points, prisoners_held_by_black, prisoners_held_by_white, komi_tenths]. Each listed dead stone is removed once and becomes a prisoner of its opponent (duplicates and empty points are ignored). Territory = empty regions (after removal) bordered by one colour only. Return [terr_b, terr_w, pris_b, pris_w, result] with result \"B+x.y\", \"W+x.y\" or \"Jigo\".","evaluation_group":"w2-go-territory-scoring-jp-territory","failed_approach":"Using a bare else for white stones credits black a prisoner for duplicate or empty dead marks.","family":"w2-go-territory-scoring-jp-territory-dead-stone-prisoner-credit","id":"FA-82866","implementations":{"attempt":{"sha256":"48ebb5cdabf96dd14e30e36acaaf5347e24a85e21f24d7948c3376f82da77544","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, dead, capb, capw, komi = x\n    g = [list(row) for row in board]\n    pb = capb\n    pw = capw\n    for r, c in dead:\n        if g[r][c] == 'B':\n            pw += 1\n        else:\n            pb += 1\n        g[r][c] = '.'\n    n = len(g)\n    m = len(g[0])\n    tb = 0\n    tw = 0\n    seen = set()\n    for r in range(n):\n        for c in range(m):\n            if g[r][c] != '.' or (r, c) in seen:\n                continue\n            stack = [(r, c)]\n            seen.add((r, c))\n            size = 0\n            owners = set()\n            while stack:\n                i, j = stack.pop()\n                size += 1\n                for p, q in ((i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)):\n                    if 0 <= p < n and 0 <= q < m:\n                        if g[p][q] == '.':\n                            if (p, q) not in seen:\n                                seen.add((p, q))\n                                stack.append((p, q))\n                        else:\n                            owners.add(g[p][q])\n            if owners == {'B'}:\n                tb += size\n            elif owners == {'W'}:\n                tw += size\n    sb = (tb + pb) * 10\n    sw = (tw + pw) * 10 + komi\n    if sb > sw:\n        res = 'B+%d.%d' % ((sb - sw) // 10, (sb - sw) % 10)\n    elif sw > sb:\n        res = 'W+%d.%d' % ((sw - sb) // 10, (sw - sb) % 10)\n    else:\n        res = 'Jigo'\n    return [tb, tw, pb, pw, res]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['W...BW', '....BW', '....BW', '....BW'], [[1, 4], [1, 4]], 1, 0, 55], [0, 0, 1, 1, 'W+5.5']], [[['..WBW', '...BW', '...BW', 'W..BW'], [[0, 3], [3, 4], [3, 0]], 3, 0, 65], [0, 0, 5, 1, 'W+2.5']], [[['..BW.', '..BW.', '..BW.', '..BWB', '..BW.', '..BW.'], [[3, 2], [3, 2]], 1, 1, 0], [0, 0, 1, 2, 'W+1.0']], [[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.....BW', '....WBW', '.W...BW', '..W..BW', '...W.BW'], [[4, 5]], 0, 0, 65], [0, 0, 0, 1, 'W+7.5']], [[['W..BW.', '..WBW.', 'W..BW.', '...BW.', '...BW.', '..WBW.'], [[1, 2], [5, 2], [0, 4]], 0, 3, 5], [0, 0, 3, 3, 'W+0.5']], [[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W.BW..', '..BW..', '..BW..', '.WBW.B', 'W.BW..', '..BW..', '.WBW..'], [[1, 2], [3, 2], [5, 0]], 2, 0, 55], [0, 0, 2, 2, 'W+5.5']]], [[[['..BW..', '..BW.B', '..BW..', '..BW..', '..BW..', '..BW..'], [[3, 3], [2, 3]], 1, 2, 5], [12, 0, 3, 2, 'B+12.5']], [[['....BW.', '....BW.', '.W..BW.', '...WBW.', '...WBWB', '....BW.'], [[5, 1]], 4, 3, 55], [0, 0, 4, 3, 'W+4.5']], [[['...BW..', '...BWB.', '...BW..', '...BW..', '...BW..'], [[0, 3], [0, 3], [4, 2]], 0, 1, 5], [0, 0, 0, 2, 'W+2.5']], [[['..BW', '.WBW', '..BW', '..BW'], [[3, 2], [0, 3], [3, 2]], 0, 4, 60], [0, 0, 1, 5, 'W+10.0']], [[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['.BW.', '.BW.', '.BW.', '.BW.'], [[3, 1]], 1, 1, 60], [0, 4, 1, 2, 'W+11.0']], [[['..BW', '..BW', '..BW', '..BW', '..BW', '..BW', '..BW'], [[0, 2], [6, 2], [5, 3]], 1, 1, 0], [0, 0, 2, 3, 'W+1.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']]], [[[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']], [[['W.BW...', '.WBW...', '..BW..B', '..BW...', '.WBWB..', '..BW...'], [[4, 4], [4, 0]], 3, 1, 55], [0, 0, 3, 2, 'W+4.5']], [[['WBW.B..', '.BW.B..', '.BWBB..', 'WBW....', '.BW.B..', '.BW.B..', 'WBW....'], [[2, 2], [6, 2], [2, 2]], 0, 1, 5], [0, 0, 2, 1, 'B+0.5']], [[['..BW', '.WBW', '..BW', '..BW', '..BW', '..BW'], [[1, 3], [3, 3], [1, 3]], 4, 1, 55], [0, 0, 6, 1, 'W+0.5']], [[['.....BW', '.....BW', '.....BW', '.W...BW', '.....BW'], [[3, 5], [1, 5], [3, 6], [3, 5]], 0, 3, 5], [0, 0, 1, 5, 'W+4.5']], [[['..BW..', '..BW.B', '..BW..', '..BW.B', 'W.BW..', '..BW..', '..BW..'], [[2, 2], [2, 2]], 2, 1, 0], [0, 0, 2, 2, 'Jigo']], [[['W..BWB', '...BW.', '...BW.', '...BWB'], [[0, 5]], 4, 0, 5], [0, 0, 4, 1, 'B+2.5']]], [[[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W...BW', '....BW', '....BW', '....BW', '....BW'], [[0, 0], [0, 4]], 0, 0, 5], [0, 0, 1, 1, 'W+0.5']], [[['..BWB', '..BWB', 'W.BW.', '..BW.', '..BW.'], [], 2, 4, 55], [0, 0, 2, 4, 'W+7.5']], [[['.BW..', 'WBWB.', '.BW..', 'WBW..', '.BW..'], [[2, 1], [3, 1]], 2, 2, 0], [0, 0, 2, 4, 'W+2.0']], [[['..BW...', '..BWB..', '.WBW...', '..BW.B.', 'W.BW...', '..BW...', '..BWBB.'], [[6, 2]], 2, 0, 65], [0, 0, 2, 1, 'W+5.5']], [[['.BW..', '.BW..', '.BW..', '.BW..', '.BWB.', '.BW..', 'WBW..'], [[0, 2], [0, 2]], 0, 2, 0], [0, 0, 1, 2, 'W+1.0']], [[['W..BW', '...BW', '...BW', '...BW', '...BW', '...BW', '...BW'], [], 2, 1, 65], [0, 0, 2, 1, 'W+5.5']], [[['B..W', 'B..W', 'B..W', 'B..W'], [[2, 0], [2, 3], [0, 3], [2, 0]], 4, 2, 5], [0, 0, 6, 3, 'B+2.5']]], [[[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['...BWBB', 'W..BW..', '..WBW..', '...BW..', '...BW.B', '...BWB.'], [[3, 4]], 2, 4, 5], [1, 0, 3, 4, 'W+0.5']], [[['.BW...', '.BWB..', '.BW...', '.BW...', '.BW...', '.BW...', '.BW.BB'], [[1, 1], [1, 1], [2, 4]], 4, 1, 60], [0, 0, 4, 2, 'W+4.0']], [[['...BW', '...BW', 'W..BW', '...BW', '.W.BW', '...BW', 'W..BW'], [], 1, 1, 0], [0, 0, 1, 1, 'Jigo']], [[['....BW.', 'W..WBW.', 'W...BW.', '..W.BW.', '....BW.', '....BW.'], [[3, 4], [4, 4], [1, 0], [2, 3]], 1, 3, 65], [0, 6, 2, 5, 'W+15.5']], [[['....', '....', '....', '....'], [], 4, 0, 60], [0, 0, 4, 0, 'W+2.0']], [[['...', '...', '...'], [], 3, 2, 65], [0, 0, 3, 2, 'W+5.5']], [[['B.B...', 'WB...B', '......', '......', '.B.B.B', 'BB....'], [[5, 1], [5, 0], [5, 1]], 2, 3, 5], [1, 0, 2, 5, 'W+2.5']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"territory score 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":"5fe396ae4a71923b4e28df03dcf3f5228b4a051a6a5eb667408d5500c18f07c3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, dead, capb, capw, komi = x\n    g = [list(row) for row in board]\n    pb = capb\n    pw = capw\n    for r, c in dead:\n        if g[r][c] == 'B':\n            pb += 1\n        elif g[r][c] == 'W':\n            pw += 1\n        g[r][c] = '.'\n    n = len(g)\n    m = len(g[0])\n    tb = 0\n    tw = 0\n    seen = set()\n    for r in range(n):\n        for c in range(m):\n            if g[r][c] != '.' or (r, c) in seen:\n                continue\n            stack = [(r, c)]\n            seen.add((r, c))\n            size = 0\n            owners = set()\n            while stack:\n                i, j = stack.pop()\n                size += 1\n                for p, q in ((i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)):\n                    if 0 <= p < n and 0 <= q < m:\n                        if g[p][q] == '.':\n                            if (p, q) not in seen:\n                                seen.add((p, q))\n                                stack.append((p, q))\n                        else:\n                            owners.add(g[p][q])\n            if owners == {'B'}:\n                tb += size\n            elif owners == {'W'}:\n                tw += size\n    sb = (tb + pb) * 10\n    sw = (tw + pw) * 10 + komi\n    if sb > sw:\n        res = 'B+%d.%d' % ((sb - sw) // 10, (sb - sw) % 10)\n    elif sw > sb:\n        res = 'W+%d.%d' % ((sw - sb) // 10, (sw - sb) % 10)\n    else:\n        res = 'Jigo'\n    return [tb, tw, pb, pw, res]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['W...BW', '....BW', '....BW', '....BW'], [[1, 4], [1, 4]], 1, 0, 55], [0, 0, 1, 1, 'W+5.5']], [[['..WBW', '...BW', '...BW', 'W..BW'], [[0, 3], [3, 4], [3, 0]], 3, 0, 65], [0, 0, 5, 1, 'W+2.5']], [[['..BW.', '..BW.', '..BW.', '..BWB', '..BW.', '..BW.'], [[3, 2], [3, 2]], 1, 1, 0], [0, 0, 1, 2, 'W+1.0']], [[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.....BW', '....WBW', '.W...BW', '..W..BW', '...W.BW'], [[4, 5]], 0, 0, 65], [0, 0, 0, 1, 'W+7.5']], [[['W..BW.', '..WBW.', 'W..BW.', '...BW.', '...BW.', '..WBW.'], [[1, 2], [5, 2], [0, 4]], 0, 3, 5], [0, 0, 3, 3, 'W+0.5']], [[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W.BW..', '..BW..', '..BW..', '.WBW.B', 'W.BW..', '..BW..', '.WBW..'], [[1, 2], [3, 2], [5, 0]], 2, 0, 55], [0, 0, 2, 2, 'W+5.5']]], [[[['..BW..', '..BW.B', '..BW..', '..BW..', '..BW..', '..BW..'], [[3, 3], [2, 3]], 1, 2, 5], [12, 0, 3, 2, 'B+12.5']], [[['....BW.', '....BW.', '.W..BW.', '...WBW.', '...WBWB', '....BW.'], [[5, 1]], 4, 3, 55], [0, 0, 4, 3, 'W+4.5']], [[['...BW..', '...BWB.', '...BW..', '...BW..', '...BW..'], [[0, 3], [0, 3], [4, 2]], 0, 1, 5], [0, 0, 0, 2, 'W+2.5']], [[['..BW', '.WBW', '..BW', '..BW'], [[3, 2], [0, 3], [3, 2]], 0, 4, 60], [0, 0, 1, 5, 'W+10.0']], [[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['.BW.', '.BW.', '.BW.', '.BW.'], [[3, 1]], 1, 1, 60], [0, 4, 1, 2, 'W+11.0']], [[['..BW', '..BW', '..BW', '..BW', '..BW', '..BW', '..BW'], [[0, 2], [6, 2], [5, 3]], 1, 1, 0], [0, 0, 2, 3, 'W+1.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']]], [[[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']], [[['W.BW...', '.WBW...', '..BW..B', '..BW...', '.WBWB..', '..BW...'], [[4, 4], [4, 0]], 3, 1, 55], [0, 0, 3, 2, 'W+4.5']], [[['WBW.B..', '.BW.B..', '.BWBB..', 'WBW....', '.BW.B..', '.BW.B..', 'WBW....'], [[2, 2], [6, 2], [2, 2]], 0, 1, 5], [0, 0, 2, 1, 'B+0.5']], [[['..BW', '.WBW', '..BW', '..BW', '..BW', '..BW'], [[1, 3], [3, 3], [1, 3]], 4, 1, 55], [0, 0, 6, 1, 'W+0.5']], [[['.....BW', '.....BW', '.....BW', '.W...BW', '.....BW'], [[3, 5], [1, 5], [3, 6], [3, 5]], 0, 3, 5], [0, 0, 1, 5, 'W+4.5']], [[['..BW..', '..BW.B', '..BW..', '..BW.B', 'W.BW..', '..BW..', '..BW..'], [[2, 2], [2, 2]], 2, 1, 0], [0, 0, 2, 2, 'Jigo']], [[['W..BWB', '...BW.', '...BW.', '...BWB'], [[0, 5]], 4, 0, 5], [0, 0, 4, 1, 'B+2.5']]], [[[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W...BW', '....BW', '....BW', '....BW', '....BW'], [[0, 0], [0, 4]], 0, 0, 5], [0, 0, 1, 1, 'W+0.5']], [[['..BWB', '..BWB', 'W.BW.', '..BW.', '..BW.'], [], 2, 4, 55], [0, 0, 2, 4, 'W+7.5']], [[['.BW..', 'WBWB.', '.BW..', 'WBW..', '.BW..'], [[2, 1], [3, 1]], 2, 2, 0], [0, 0, 2, 4, 'W+2.0']], [[['..BW...', '..BWB..', '.WBW...', '..BW.B.', 'W.BW...', '..BW...', '..BWBB.'], [[6, 2]], 2, 0, 65], [0, 0, 2, 1, 'W+5.5']], [[['.BW..', '.BW..', '.BW..', '.BW..', '.BWB.', '.BW..', 'WBW..'], [[0, 2], [0, 2]], 0, 2, 0], [0, 0, 1, 2, 'W+1.0']], [[['W..BW', '...BW', '...BW', '...BW', '...BW', '...BW', '...BW'], [], 2, 1, 65], [0, 0, 2, 1, 'W+5.5']], [[['B..W', 'B..W', 'B..W', 'B..W'], [[2, 0], [2, 3], [0, 3], [2, 0]], 4, 2, 5], [0, 0, 6, 3, 'B+2.5']]], [[[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['...BWBB', 'W..BW..', '..WBW..', '...BW..', '...BW.B', '...BWB.'], [[3, 4]], 2, 4, 5], [1, 0, 3, 4, 'W+0.5']], [[['.BW...', '.BWB..', '.BW...', '.BW...', '.BW...', '.BW...', '.BW.BB'], [[1, 1], [1, 1], [2, 4]], 4, 1, 60], [0, 0, 4, 2, 'W+4.0']], [[['...BW', '...BW', 'W..BW', '...BW', '.W.BW', '...BW', 'W..BW'], [], 1, 1, 0], [0, 0, 1, 1, 'Jigo']], [[['....BW.', 'W..WBW.', 'W...BW.', '..W.BW.', '....BW.', '....BW.'], [[3, 4], [4, 4], [1, 0], [2, 3]], 1, 3, 65], [0, 6, 2, 5, 'W+15.5']], [[['....', '....', '....', '....'], [], 4, 0, 60], [0, 0, 4, 0, 'W+2.0']], [[['...', '...', '...'], [], 3, 2, 65], [0, 0, 3, 2, 'W+5.5']], [[['B.B...', 'WB...B', '......', '......', '.B.B.B', 'BB....'], [[5, 1], [5, 0], [5, 1]], 2, 3, 5], [1, 0, 2, 5, 'W+2.5']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"territory score 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":"0365910bb99af659ecf629350e63a54b8cceba7fe105653806236b75b95e6a96","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    board, dead, capb, capw, komi = x\n    g = [list(row) for row in board]\n    pb = capb\n    pw = capw\n    for r, c in dead:\n        if g[r][c] == 'B':\n            pw += 1\n        elif g[r][c] == 'W':\n            pb += 1\n        g[r][c] = '.'\n    n = len(g)\n    m = len(g[0])\n    tb = 0\n    tw = 0\n    seen = set()\n    for r in range(n):\n        for c in range(m):\n            if g[r][c] != '.' or (r, c) in seen:\n                continue\n            stack = [(r, c)]\n            seen.add((r, c))\n            size = 0\n            owners = set()\n            while stack:\n                i, j = stack.pop()\n                size += 1\n                for p, q in ((i + 1, j), (i - 1, j), (i, j + 1), (i, j - 1)):\n                    if 0 <= p < n and 0 <= q < m:\n                        if g[p][q] == '.':\n                            if (p, q) not in seen:\n                                seen.add((p, q))\n                                stack.append((p, q))\n                        else:\n                            owners.add(g[p][q])\n            if owners == {'B'}:\n                tb += size\n            elif owners == {'W'}:\n                tw += size\n    sb = (tb + pb) * 10\n    sw = (tw + pw) * 10 + komi\n    if sb > sw:\n        res = 'B+%d.%d' % ((sb - sw) // 10, (sb - sw) % 10)\n    elif sw > sb:\n        res = 'W+%d.%d' % ((sw - sb) // 10, (sw - sb) % 10)\n    else:\n        res = 'Jigo'\n    return [tb, tw, pb, pw, res]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[['W...BW', '....BW', '....BW', '....BW'], [[1, 4], [1, 4]], 1, 0, 55], [0, 0, 1, 1, 'W+5.5']], [[['..WBW', '...BW', '...BW', 'W..BW'], [[0, 3], [3, 4], [3, 0]], 3, 0, 65], [0, 0, 5, 1, 'W+2.5']], [[['..BW.', '..BW.', '..BW.', '..BWB', '..BW.', '..BW.'], [[3, 2], [3, 2]], 1, 1, 0], [0, 0, 1, 2, 'W+1.0']], [[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.....BW', '....WBW', '.W...BW', '..W..BW', '...W.BW'], [[4, 5]], 0, 0, 65], [0, 0, 0, 1, 'W+7.5']], [[['W..BW.', '..WBW.', 'W..BW.', '...BW.', '...BW.', '..WBW.'], [[1, 2], [5, 2], [0, 4]], 0, 3, 5], [0, 0, 3, 3, 'W+0.5']], [[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W.BW..', '..BW..', '..BW..', '.WBW.B', 'W.BW..', '..BW..', '.WBW..'], [[1, 2], [3, 2], [5, 0]], 2, 0, 55], [0, 0, 2, 2, 'W+5.5']]], [[[['..BW..', '..BW.B', '..BW..', '..BW..', '..BW..', '..BW..'], [[3, 3], [2, 3]], 1, 2, 5], [12, 0, 3, 2, 'B+12.5']], [[['....BW.', '....BW.', '.W..BW.', '...WBW.', '...WBWB', '....BW.'], [[5, 1]], 4, 3, 55], [0, 0, 4, 3, 'W+4.5']], [[['...BW..', '...BWB.', '...BW..', '...BW..', '...BW..'], [[0, 3], [0, 3], [4, 2]], 0, 1, 5], [0, 0, 0, 2, 'W+2.5']], [[['..BW', '.WBW', '..BW', '..BW'], [[3, 2], [0, 3], [3, 2]], 0, 4, 60], [0, 0, 1, 5, 'W+10.0']], [[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['.BW.', '.BW.', '.BW.', '.BW.'], [[3, 1]], 1, 1, 60], [0, 4, 1, 2, 'W+11.0']], [[['..BW', '..BW', '..BW', '..BW', '..BW', '..BW', '..BW'], [[0, 2], [6, 2], [5, 3]], 1, 1, 0], [0, 0, 2, 3, 'W+1.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']]], [[[['.BW.B..', '.BW....', '.BW....', '.BW.B..', '.BW....', '.BW.B..', '.BW....'], [[4, 2], [2, 1], [6, 1]], 3, 0, 0], [0, 0, 4, 2, 'B+2.0']], [[['.BW.', '.BW.', '.BW.', '.BW.', '.BWB', '.BWB', 'WBW.'], [[4, 1], [4, 1]], 0, 2, 0], [0, 0, 0, 3, 'W+3.0']], [[['W.BW...', '.WBW...', '..BW..B', '..BW...', '.WBWB..', '..BW...'], [[4, 4], [4, 0]], 3, 1, 55], [0, 0, 3, 2, 'W+4.5']], [[['WBW.B..', '.BW.B..', '.BWBB..', 'WBW....', '.BW.B..', '.BW.B..', 'WBW....'], [[2, 2], [6, 2], [2, 2]], 0, 1, 5], [0, 0, 2, 1, 'B+0.5']], [[['..BW', '.WBW', '..BW', '..BW', '..BW', '..BW'], [[1, 3], [3, 3], [1, 3]], 4, 1, 55], [0, 0, 6, 1, 'W+0.5']], [[['.....BW', '.....BW', '.....BW', '.W...BW', '.....BW'], [[3, 5], [1, 5], [3, 6], [3, 5]], 0, 3, 5], [0, 0, 1, 5, 'W+4.5']], [[['..BW..', '..BW.B', '..BW..', '..BW.B', 'W.BW..', '..BW..', '..BW..'], [[2, 2], [2, 2]], 2, 1, 0], [0, 0, 2, 2, 'Jigo']], [[['W..BWB', '...BW.', '...BW.', '...BWB'], [[0, 5]], 4, 0, 5], [0, 0, 4, 1, 'B+2.5']]], [[[['W.BW..', 'W.BW..', '..BW..', '.WBW..', '..BW..', '..BW..', '..BW..'], [[3, 2]], 3, 3, 0], [0, 14, 3, 4, 'W+15.0']], [[['W...BW', '....BW', '....BW', '....BW', '....BW'], [[0, 0], [0, 4]], 0, 0, 5], [0, 0, 1, 1, 'W+0.5']], [[['..BWB', '..BWB', 'W.BW.', '..BW.', '..BW.'], [], 2, 4, 55], [0, 0, 2, 4, 'W+7.5']], [[['.BW..', 'WBWB.', '.BW..', 'WBW..', '.BW..'], [[2, 1], [3, 1]], 2, 2, 0], [0, 0, 2, 4, 'W+2.0']], [[['..BW...', '..BWB..', '.WBW...', '..BW.B.', 'W.BW...', '..BW...', '..BWBB.'], [[6, 2]], 2, 0, 65], [0, 0, 2, 1, 'W+5.5']], [[['.BW..', '.BW..', '.BW..', '.BW..', '.BWB.', '.BW..', 'WBW..'], [[0, 2], [0, 2]], 0, 2, 0], [0, 0, 1, 2, 'W+1.0']], [[['W..BW', '...BW', '...BW', '...BW', '...BW', '...BW', '...BW'], [], 2, 1, 65], [0, 0, 2, 1, 'W+5.5']], [[['B..W', 'B..W', 'B..W', 'B..W'], [[2, 0], [2, 3], [0, 3], [2, 0]], 4, 2, 5], [0, 0, 6, 3, 'B+2.5']]], [[[['....BWB', '....BW.', '....BW.', '....BWB'], [[2, 5]], 4, 1, 0], [16, 0, 5, 1, 'B+20.0']], [[['...BWBB', 'W..BW..', '..WBW..', '...BW..', '...BW.B', '...BWB.'], [[3, 4]], 2, 4, 5], [1, 0, 3, 4, 'W+0.5']], [[['.BW...', '.BWB..', '.BW...', '.BW...', '.BW...', '.BW...', '.BW.BB'], [[1, 1], [1, 1], [2, 4]], 4, 1, 60], [0, 0, 4, 2, 'W+4.0']], [[['...BW', '...BW', 'W..BW', '...BW', '.W.BW', '...BW', 'W..BW'], [], 1, 1, 0], [0, 0, 1, 1, 'Jigo']], [[['....BW.', 'W..WBW.', 'W...BW.', '..W.BW.', '....BW.', '....BW.'], [[3, 4], [4, 4], [1, 0], [2, 3]], 1, 3, 65], [0, 6, 2, 5, 'W+15.5']], [[['....', '....', '....', '....'], [], 4, 0, 60], [0, 0, 4, 0, 'W+2.0']], [[['...', '...', '...'], [], 3, 2, 65], [0, 0, 3, 2, 'W+5.5']], [[['B.B...', 'WB...B', '......', '......', '.B.B.B', 'BB....'], [[5, 1], [5, 0], [5, 1]], 2, 3, 5], [1, 0, 2, 5, 'W+2.5']]]]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"territory score 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-jp-territory-dead-stone-prisoner-credit","generated_at":"2026-09-29T14:50:16.016132+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":"A dead black stone is a white prisoner and a dead white stone is a black prisoner.","root_cause":"The removal loop increments the prisoner counter of the stone colour rather than the opponent.","sha256":"9071c2e0cfb2ab4206eaf5c3986f5938fc74a2d434564adef373e74e9773a57c","title":"Dead stones are credited as prisoners to their own colour · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":40.557,"exit_code":1,"observations":[{"actual":[0,0,2,1,"W+4.5"],"check":"territory score case 0","expected":[0,0,1,1,"W+5.5"],"passed":false},{"actual":[0,0,5,1,"W+2.5"],"check":"territory score case 1","expected":[0,0,5,1,"W+2.5"],"passed":true},{"actual":[0,0,2,2,"Jigo"],"check":"territory score case 2","expected":[0,0,1,2,"W+1.0"],"passed":false},{"actual":[0,0,4,2,"B+2.0"],"check":"territory score case 3","expected":[0,0,4,2,"B+2.0"],"passed":true},{"actual":[0,0,0,1,"W+7.5"],"check":"territory score case 4","expected":[0,0,0,1,"W+7.5"],"passed":true},{"actual":[0,0,3,3,"W+0.5"],"check":"territory score case 5","expected":[0,0,3,3,"W+0.5"],"passed":true},{"actual":[0,14,3,4,"W+15.0"],"check":"territory score case 6","expected":[0,14,3,4,"W+15.0"],"passed":true},{"actual":[0,0,3,2,"W+4.5"],"check":"territory score case 7","expected":[0,0,2,2,"W+5.5"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"territory score case 0\", \"actual\": [0, 0, 2, 1, \"W+4.5\"], \"expected\": [0, 0, 1, 1, \"W+5.5\"], \"passed\": false}, {\"check\": \"territory score case 1\", \"actual\": [0, 0, 5, 1, \"W+2.5\"], \"expected\": [0, 0, 5, 1, \"W+2.5\"], \"passed\": true}, {\"check\": \"territory score case 2\", \"actual\": [0, 0, 2, 2, \"Jigo\"], \"expected\": [0, 0, 1, 2, \"W+1.0\"], \"passed\": false}, {\"check\": \"territory score case 3\", \"actual\": [0, 0, 4, 2, \"B+2.0\"], \"expected\": [0, 0, 4, 2, \"B+2.0\"], \"passed\": true}, {\"check\": \"territory score case 4\", \"actual\": [0, 0, 0, 1, \"W+7.5\"], \"expected\": [0, 0, 0, 1, \"W+7.5\"], \"passed\": true}, {\"check\": \"territory score case 5\", \"actual\": [0, 0, 3, 3, \"W+0.5\"], \"expected\": [0, 0, 3, 3, \"W+0.5\"], \"passed\": true}, {\"check\": \"territory score case 6\", \"actual\": [0, 14, 3, 4, \"W+15.0\"], \"expected\": [0, 14, 3, 4, \"W+15.0\"], \"passed\": true}, {\"check\": \"territory score case 7\", \"actual\": [0, 0, 3, 2, \"W+4.5\"], \"expected\": [0, 0, 2, 2, \"W+5.5\"], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":40.875,"exit_code":1,"observations":[{"actual":[0,0,2,0,"W+3.5"],"check":"territory score case 0","expected":[0,0,1,1,"W+5.5"],"passed":false},{"actual":[0,0,4,2,"W+4.5"],"check":"territory score case 1","expected":[0,0,5,1,"W+2.5"],"passed":false},{"actual":[0,0,2,1,"B+1.0"],"check":"territory score case 2","expected":[0,0,1,2,"W+1.0"],"passed":false},{"actual":[0,0,5,1,"B+4.0"],"check":"territory score case 3","expected":[0,0,4,2,"B+2.0"],"passed":false},{"actual":[0,0,1,0,"W+5.5"],"check":"territory score case 4","expected":[0,0,0,1,"W+7.5"],"passed":false},{"actual":[0,0,0,6,"W+6.5"],"check":"territory score case 5","expected":[0,0,3,3,"W+0.5"],"passed":false},{"actual":[0,14,4,3,"W+13.0"],"check":"territory score case 6","expected":[0,14,3,4,"W+15.0"],"passed":false},{"actual":[0,0,4,0,"W+1.5"],"check":"territory score case 7","expected":[0,0,2,2,"W+5.5"],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"territory score case 0\", \"actual\": [0, 0, 2, 0, \"W+3.5\"], \"expected\": [0, 0, 1, 1, \"W+5.5\"], \"passed\": false}, {\"check\": \"territory score case 1\", \"actual\": [0, 0, 4, 2, \"W+4.5\"], \"expected\": [0, 0, 5, 1, \"W+2.5\"], \"passed\": false}, {\"check\": \"territory score case 2\", \"actual\": [0, 0, 2, 1, \"B+1.0\"], \"expected\": [0, 0, 1, 2, \"W+1.0\"], \"passed\": false}, {\"check\": \"territory score case 3\", \"actual\": [0, 0, 5, 1, \"B+4.0\"], \"expected\": [0, 0, 4, 2, \"B+2.0\"], \"passed\": false}, {\"check\": \"territory score case 4\", \"actual\": [0, 0, 1, 0, \"W+5.5\"], \"expected\": [0, 0, 0, 1, \"W+7.5\"], \"passed\": false}, {\"check\": \"territory score case 5\", \"actual\": [0, 0, 0, 6, \"W+6.5\"], \"expected\": [0, 0, 3, 3, \"W+0.5\"], \"passed\": false}, {\"check\": \"territory score case 6\", \"actual\": [0, 14, 4, 3, \"W+13.0\"], \"expected\": [0, 14, 3, 4, \"W+15.0\"], \"passed\": false}, {\"check\": \"territory score case 7\", \"actual\": [0, 0, 4, 0, \"W+1.5\"], \"expected\": [0, 0, 2, 2, \"W+5.5\"], \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":39.986,"exit_code":0,"observations":[{"actual":[0,0,1,1,"W+5.5"],"check":"territory score case 0","expected":[0,0,1,1,"W+5.5"],"passed":true},{"actual":[0,0,5,1,"W+2.5"],"check":"territory score case 1","expected":[0,0,5,1,"W+2.5"],"passed":true},{"actual":[0,0,1,2,"W+1.0"],"check":"territory score case 2","expected":[0,0,1,2,"W+1.0"],"passed":true},{"actual":[0,0,4,2,"B+2.0"],"check":"territory score case 3","expected":[0,0,4,2,"B+2.0"],"passed":true},{"actual":[0,0,0,1,"W+7.5"],"check":"territory score case 4","expected":[0,0,0,1,"W+7.5"],"passed":true},{"actual":[0,0,3,3,"W+0.5"],"check":"territory score case 5","expected":[0,0,3,3,"W+0.5"],"passed":true},{"actual":[0,14,3,4,"W+15.0"],"check":"territory score case 6","expected":[0,14,3,4,"W+15.0"],"passed":true},{"actual":[0,0,2,2,"W+5.5"],"check":"territory score case 7","expected":[0,0,2,2,"W+5.5"],"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"territory score case 0\", \"actual\": [0, 0, 1, 1, \"W+5.5\"], \"expected\": [0, 0, 1, 1, \"W+5.5\"], \"passed\": true}, {\"check\": \"territory score case 1\", \"actual\": [0, 0, 5, 1, \"W+2.5\"], \"expected\": [0, 0, 5, 1, \"W+2.5\"], \"passed\": true}, {\"check\": \"territory score case 2\", \"actual\": [0, 0, 1, 2, \"W+1.0\"], \"expected\": [0, 0, 1, 2, \"W+1.0\"], \"passed\": true}, {\"check\": \"territory score case 3\", \"actual\": [0, 0, 4, 2, \"B+2.0\"], \"expected\": [0, 0, 4, 2, \"B+2.0\"], \"passed\": true}, {\"check\": \"territory score case 4\", \"actual\": [0, 0, 0, 1, \"W+7.5\"], \"expected\": [0, 0, 0, 1, \"W+7.5\"], \"passed\": true}, {\"check\": \"territory score case 5\", \"actual\": [0, 0, 3, 3, \"W+0.5\"], \"expected\": [0, 0, 3, 3, \"W+0.5\"], \"passed\": true}, {\"check\": \"territory score case 6\", \"actual\": [0, 14, 3, 4, \"W+15.0\"], \"expected\": [0, 14, 3, 4, \"W+15.0\"], \"passed\": true}, {\"check\": \"territory score case 7\", \"actual\": [0, 0, 2, 2, \"W+5.5\"], \"expected\": [0, 0, 2, 2, \"W+5.5\"], \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}