FA-87586 / Collision detection broadphase / Open access
Equal Morton codes are ordered by string id · case 01
Build output is nondeterministic across id widths (10 sorts before 9).
ROOT CAUSE
The tiebreak compares str(id).
VERIFIED REPAIR
Tie-break by numeric id.
Unsuccessful approach: Relying on stable input order ignores the id tiebreak.
Case contract
solve(pts, bounds): LBVH ordering. Each centroid [id,x,y] is quantized per axis to min(1023, max(0, floor((c-lo)/(hi-lo)*1024))) (0 for a flat axis), and the 10-bit values are interleaved with x in even bits and y in odd bits. Return [[id, code]] sorted by (code, numeric id).
Why this case matters
Broadphase stages decide which object pairs ever reach narrowphase; a wrong boundary, ordering or bookkeeping rule silently drops real contacts or floods the solver with false candidates.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pts, bounds):
def part(v):
v &= 0x3FF
v = (v | (v << 8)) & 0x00FF00FF
v = (v | (v << 4)) & 0x0F0F0F0F
v = (v | (v << 2)) & 0x33333333
v = (v | (v << 1)) & 0x55555555
return v
def quant(c, lo, hi):
if hi <= lo:
return 0
return min(1023, max(0, math.floor((c - lo) / (hi - lo) * 1024)))
out = []
for i, x, y in pts:
code = part(quant(x, bounds[0], bounds[2])) | (part(quant(y, bounds[1], bounds[3])) << 1)
out.append([i, code])
out.sort(key=lambda r: (r[1], str(r[0])))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[2, 15.68, 3.56], [3, 5.0, 2.99], [23, 15.0, -1.89], [7, 15.0, -4.0], [11, 15.0, -4.0], [4, 9.04, -4.22]], [5.0, -4.0, 15.0, 4.0]], [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]]], [[[[29, 15.14, -4.07], [13, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[29, 16709], [13, 699050]]], [[[[6, -10.0, 6.42], [28, -7.78, 3.03]], [-10.0, 0.0, 6.0, 8.0]], [[28, 180318], [6, 657954]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[26, -0.45, 2.25], [9, -0.45, 2.25], [5, 0.0, 5.4]], [0.0, 0.0, 10.0, 32.0]], [[9, 8320], [26, 8320], [5, 34976]]], [[[[18, 6.85, 5.88], [15, 6.85, 5.88], [22, 8.67, -4.37], [23, 5.0, 10.22], [29, 15.0, -4.0], [19, 11.79, -4.0]], [5.0, -4.0, 15.0, 28.0]], [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]]], [[[[29, -1.85, 30.67], [2, -10.0, 7.32], [22, 6.0, 0.0], [11, -2.97, 20.92], [4, 6.0, 32.0]], [-10.0, 0.0, 6.0, 32.0]], [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]]], [[[[6, -1.4, -4.0], [18, -8.16, 15.21], [8, -5.93, 22.33]], [-10.0, -4.0, 0.0, 28.0]], [[6, 333056], [18, 552312], [8, 746632]]]], [[[[[26, 15.0, 8.65], [14, 15.0, 8.65], [10, 9.54, -1.05], [28, 15.0, 28.0], [18, 15.0, 4.92], [4, 10.73, 28.0]], [5.0, -4.0, 15.0, 28.0]], [[10, 95144], [18, 481271], [14, 513909], [26, 513909], [4, 965358], [28, 1048575]]], [[[[14, 47.68, 0.0], [5, 100.0, 32.0], [2, 34.97, 0.0], [23, 100.0, 32.0], [6, 24.83, 13.56], [7, 26.2, 22.2], [9, 16.61, 32.0], [1, 100.0, 0.61]], [0.0, 0.0, 100.0, 32.0]], [[2, 70676], [14, 87104], [6, 188246], [1, 350047], [7, 630904], [9, 716526], [5, 1048575], [23, 1048575]]], [[[[28, 4.08, 8.0], [3, 4.08, 8.0], [11, 100.0, 0.0], [19, 86.81, 0.0], [29, 0.0, 0.0], [26, 60.01, 5.58], [10, 53.02, 8.0]], [0.0, 0.0, 100.0, 8.0]], [[29, 0], [19, 333120], [11, 349525], [3, 700139], [28, 700139], [26, 832668], [10, 961534]]], [[[[29, -10.0, -0.25], [3, -10.57, 28.0], [19, -10.0, -4.0], [9, -10.0, -4.0], [20, -10.0, -4.0]], [-10.0, -4.0, -10.0, 28.0]], [[9, 0], [19, 0], [20, 0], [29, 10880], [3, 699050]]], [[[[3, 5.0, -4.0], [2, 4.61, 3.19], [20, 5.0, 16.57], [23, 5.24, 1.38], [4, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [23, 34976], [2, 43048], [20, 557576], [4, 699050]]], [[[[12, 16.0, 2.12], [8, 16.0, 2.12], [20, 9.38, 4.0], [23, 0.0, 0.12], [25, 11.84, 4.0], [3, 7.58, -2.68], [2, 9.7, 2.72], [22, 8.35, -2.83]], [0.0, -4.0, 16.0, 4.0]], [[3, 122001], [22, 295734], [23, 524458], [2, 931568], [20, 965610], [25, 982971], [8, 1005055], [12, 1005055]]], [[[[24, 50.31, 6.58], [27, 90.0, 0.0], [25, 65.58, 0.0]], [-10.0, 0.0, 90.0, 32.0]], [[24, 308809], [25, 327697], [27, 349525]]], [[[[18, 6.0, -4.0], [8, 6.0, -4.0]], [-10.0, -4.0, 6.0, 28.0]], [[8, 349525], [18, 349525]]]], [[[[[13, -10.0, 27.92], [18, -9.16, 5.81]], [-10.0, 0.0, -10.0, 32.0]], [[18, 35458], [13, 666274]]], [[[[24, -10.0, 32.0], [10, -10.0, 32.0], [8, -10.0, 29.8], [29, -10.0, 6.27], [21, -10.0, 13.14], [14, -10.0, 17.37]], [-10.0, 0.0, -10.0, 32.0]], [[29, 41088], [21, 165920], [14, 526474], [8, 690818], [10, 699050], [24, 699050]]], [[[[8, 7.79, 32.0], [14, 7.79, 32.0], [4, 20.76, 28.84], [24, 5.0, 12.55], [16, 11.25, 15.97], [3, 5.0, 8.32], [19, 5.0, 9.9], [15, 4.07, 0.0], [20, 5.0, 28.49]], [5.0, 0.0, 21.0, 32.0]], [[15, 0], [3, 131208], [19, 133792], [24, 164354], [16, 256938], [20, 688298], [8, 716718], [14, 716718], [4, 1038216]]], [[[[1, -10.0, -4.0], [17, -10.0, -4.0], [18, 6.0, 0.25], [10, 1.71, 0.39], [23, -0.65, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[1, 0], [17, 0], [23, 266516], [10, 810579], [18, 875861]]], [[[[2, 5.42, -3.91], [24, 5.0, -4.0], [8, 5.0, 4.0], [7, 5.0, 4.0], [12, 5.0, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[24, 0], [2, 138], [7, 699050], [8, 699050], [12, 699050]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[3, 105.0, 3.0], [2, 105.0, 3.0], [20, 33.46, 28.0], [7, 79.71, 28.0]], [5.0, -4.0, 105.0, 28.0]], [[2, 392533], [3, 392533], [20, 765615], [7, 983035]]], [[[[25, 10.0, 5.64], [8, 10.0, 5.64], [6, 10.0, 6.72], [5, 0.0, 8.0]], [0.0, 0.0, 10.0, 8.0]], [[5, 699050], [8, 915287], [25, 915287], [6, 1013749]]]], [[[[[27, 5.0, 7.71], [11, 5.0, 8.0], [17, 5.0, 6.94], [21, 5.0, 2.6], [9, 5.0, 2.12], [10, 5.69, 0.0], [23, 5.0, 8.0], [29, 5.36, 8.0], [19, 5.0, 8.0], [7, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[10, 0], [9, 131242], [21, 139424], [17, 666240], [27, 696968], [7, 699050], [11, 699050], [19, 699050], [23, 699050], [29, 699050]]], [[[[18, 0.0, 32.0], [8, 16.0, 18.69]], [0.0, 0.0, 16.0, 32.0]], [[18, 699050], [8, 882557]]], [[[[26, 1.65, 0.0], [12, 0.0, 7.0], [2, 0.0, 6.65], [29, 10.0, 6.7], [6, 1.83, 8.48], [27, 6.69, 8.0], [14, 10.0, 8.0], [9, 10.0, 1.99]], [0.0, 0.0, 10.0, 8.0]], [[26, 17472], [9, 393213], [2, 664074], [12, 688128], [6, 716783], [27, 978683], [29, 1013719], [14, 1048575]]], [[[[19, 0.0, 0.0], [20, 0.0, 8.62], [17, -0.27, 0.0]], [0.0, 0.0, 0.0, 8.0]], [[17, 0], [19, 0], [20, 699050]]], [[[[26, 0.0, -4.0], [4, -0.48, -0.87], [9, 0.0, -2.79], [28, 0.0, -4.0], [10, 0.0, 28.0], [18, 0.0, -2.0], [5, 0.0, -4.0], [21, 0.0, 7.41]], [0.0, -4.0, 0.0, 28.0]], [[5, 0], [26, 0], [28, 0], [9, 2088], [18, 8192], [4, 10272], [21, 141474], [10, 699050]]], [[[[25, 5.0, 15.89], [11, 14.68, 32.0], [1, 13.39, 26.2], [21, 15.0, 8.56], [15, 15.0, 32.0]], [5.0, 0.0, 15.0, 32.0]], [[25, 174752], [21, 481111], [1, 995693], [11, 1047551], [15, 1048575]]], [[[[18, 15.0, 0.0], [6, 15.0, 0.0], [20, 5.0, 0.0]], [5.0, 0.0, 15.0, 8.0]], [[20, 0], [6, 349525], [18, 349525]]], [[[[28, 6.64, 32.0], [24, 1.44, 32.0], [12, 10.0, 21.67], [17, 0.0, 18.06], [6, 0.0, 17.6], [29, 4.94, 21.87], [9, 9.22, 7.36], [16, 0.08, 32.0], [13, 8.58, 1.11], [22, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[22, 0], [13, 334942], [9, 388490], [6, 526858], [17, 532482], [29, 647115], [16, 699114], [24, 715695], [12, 909175], [28, 978623]]]], [[[[[12, 0.0, 3.63], [24, 0.0, 3.63], [14, 0.0, 6.97]], [0.0, 0.0, 0.0, 8.0]], [[12, 172544], [24, 172544], [14, 666272]]], [[[[9, 21.0, -4.0], [7, 21.0, -4.0], [15, 19.51, 4.95], [10, 5.0, -4.0], [25, 21.0, -4.0], [12, 17.72, 4.0], [26, 21.0, -4.0], [8, 6.03, -4.0]], [5.0, -4.0, 21.0, 4.0]], [[10, 0], [8, 4097], [7, 349525], [9, 349525], [25, 349525], [26, 349525], [12, 1027838], [15, 1044138]]], [[[[27, 5.0, 0.0], [19, 4.22, 0.0], [10, 5.0, 8.05], [25, 5.0, 1.04], [12, 5.01, 8.0], [28, 5.0, 0.0], [23, 5.0, 0.0]], [5.0, 0.0, 5.0, 8.0]], [[19, 0], [23, 0], [27, 0], [28, 0], [25, 32802], [10, 699050], [12, 699050]]], [[[[8, -2.58, 0.0], [27, -10.0, 31.04], [19, -2.08, 28.72], [7, -10.0, 5.9], [14, 3.12, 0.0], [29, 6.0, 13.1], [11, -10.0, 3.02]], [-10.0, 0.0, 6.0, 32.0]], [[11, 10240], [7, 35488], [8, 86340], [14, 331797], [29, 515423], [27, 698370], [19, 776046]]], [[[[2, 0.0, 28.0], [1, 0.0, 28.0], [27, 0.0, -4.3], [22, 0.0, 10.81], [12, 0.0, 17.36], [9, 0.0, 28.0], [6, 0.0, 20.38], [28, 0.0, 27.4], [16, -0.31, 28.0], [18, 0.0, 9.16], [13, -0.36, 9.17]], [0.0, -4.0, 0.0, 28.0]], [[27, 0], [13, 165922], [18, 165922], [22, 172674], [12, 559242], [6, 655520], [28, 698528], [1, 699050], [2, 699050], [9, 699050], [16, 699050]]], [[[[26, 1.35, 0.0], [27, 1.35, 0.0], [28, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[28, 0], [26, 16452], [27, 16452]]], [[[[20, 40.86, 27.56], [16, 40.86, 27.56], [24, 76.52, 0.0], [29, 105.0, 32.0], [3, 105.0, 32.0], [22, 93.26, 32.0], [13, 5.0, 20.19], [4, 44.54, 32.0], [11, 76.3, 28.2]], [5.0, 0.0, 105.0, 32.0]], [[24, 282960], [13, 557096], [16, 736855], [20, 736855], [4, 781242], [11, 971116], [22, 1043135], [3, 1048575], [29, 1048575]]], [[[[23, 5.01, 28.0], [14, 5.01, 28.0], [2, 9.12, 21.41], [5, 15.0, -4.0], [10, 9.98, 5.44], [28, 15.0, -4.0], [6, 8.26, 8.74], [16, 13.41, 18.61], [3, 5.0, 1.35]], [5.0, -4.0, 15.0, 28.0]], [[3, 34954], [10, 220665], [6, 234107], [5, 349525], [28, 349525], [14, 699051], [23, 699051], [2, 740531], [16, 897883]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("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 |
|---|---|---|---|
| case 0 | [[4, 82257], [11, 349525], [7, 349525], [23, 480765], [3, 666280], [2, 1045887]] | [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]] | Failed |
| case 1 | [[29, 16709], [13, 699050]] | [[29, 16709], [13, 699050]] | Passed |
| case 2 | [[28, 180318], [6, 657954]] | [[28, 180318], [6, 657954]] | Passed |
| case 3 | [[29, 349249], [8, 349249]] | [[8, 349249], [29, 349249]] | Failed |
| case 4 | [[26, 8320], [9, 8320], [5, 34976]] | [[9, 8320], [26, 8320], [5, 34976]] | Failed |
| case 5 | [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]] | [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]] | Passed |
| case 6 | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | Passed |
| case 7 | [[6, 333056], [18, 552312], [8, 746632]] | [[6, 333056], [18, 552312], [8, 746632]] | Passed |
SHA-256 / e6f88cd2be033bc7e1738cc56f459e8826d4973d8ee483a29ff670d1b86cf6d0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pts, bounds):
def part(v):
v &= 0x3FF
v = (v | (v << 8)) & 0x00FF00FF
v = (v | (v << 4)) & 0x0F0F0F0F
v = (v | (v << 2)) & 0x33333333
v = (v | (v << 1)) & 0x55555555
return v
def quant(c, lo, hi):
if hi <= lo:
return 0
return min(1023, max(0, math.floor((c - lo) / (hi - lo) * 1024)))
out = []
for i, x, y in pts:
code = part(quant(x, bounds[0], bounds[2])) | (part(quant(y, bounds[1], bounds[3])) << 1)
out.append([i, code])
out.sort(key=lambda r: r[1])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[2, 15.68, 3.56], [3, 5.0, 2.99], [23, 15.0, -1.89], [7, 15.0, -4.0], [11, 15.0, -4.0], [4, 9.04, -4.22]], [5.0, -4.0, 15.0, 4.0]], [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]]], [[[[29, 15.14, -4.07], [13, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[29, 16709], [13, 699050]]], [[[[6, -10.0, 6.42], [28, -7.78, 3.03]], [-10.0, 0.0, 6.0, 8.0]], [[28, 180318], [6, 657954]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[26, -0.45, 2.25], [9, -0.45, 2.25], [5, 0.0, 5.4]], [0.0, 0.0, 10.0, 32.0]], [[9, 8320], [26, 8320], [5, 34976]]], [[[[18, 6.85, 5.88], [15, 6.85, 5.88], [22, 8.67, -4.37], [23, 5.0, 10.22], [29, 15.0, -4.0], [19, 11.79, -4.0]], [5.0, -4.0, 15.0, 28.0]], [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]]], [[[[29, -1.85, 30.67], [2, -10.0, 7.32], [22, 6.0, 0.0], [11, -2.97, 20.92], [4, 6.0, 32.0]], [-10.0, 0.0, 6.0, 32.0]], [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]]], [[[[6, -1.4, -4.0], [18, -8.16, 15.21], [8, -5.93, 22.33]], [-10.0, -4.0, 0.0, 28.0]], [[6, 333056], [18, 552312], [8, 746632]]]], [[[[[26, 15.0, 8.65], [14, 15.0, 8.65], [10, 9.54, -1.05], [28, 15.0, 28.0], [18, 15.0, 4.92], [4, 10.73, 28.0]], [5.0, -4.0, 15.0, 28.0]], [[10, 95144], [18, 481271], [14, 513909], [26, 513909], [4, 965358], [28, 1048575]]], [[[[14, 47.68, 0.0], [5, 100.0, 32.0], [2, 34.97, 0.0], [23, 100.0, 32.0], [6, 24.83, 13.56], [7, 26.2, 22.2], [9, 16.61, 32.0], [1, 100.0, 0.61]], [0.0, 0.0, 100.0, 32.0]], [[2, 70676], [14, 87104], [6, 188246], [1, 350047], [7, 630904], [9, 716526], [5, 1048575], [23, 1048575]]], [[[[28, 4.08, 8.0], [3, 4.08, 8.0], [11, 100.0, 0.0], [19, 86.81, 0.0], [29, 0.0, 0.0], [26, 60.01, 5.58], [10, 53.02, 8.0]], [0.0, 0.0, 100.0, 8.0]], [[29, 0], [19, 333120], [11, 349525], [3, 700139], [28, 700139], [26, 832668], [10, 961534]]], [[[[29, -10.0, -0.25], [3, -10.57, 28.0], [19, -10.0, -4.0], [9, -10.0, -4.0], [20, -10.0, -4.0]], [-10.0, -4.0, -10.0, 28.0]], [[9, 0], [19, 0], [20, 0], [29, 10880], [3, 699050]]], [[[[3, 5.0, -4.0], [2, 4.61, 3.19], [20, 5.0, 16.57], [23, 5.24, 1.38], [4, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [23, 34976], [2, 43048], [20, 557576], [4, 699050]]], [[[[12, 16.0, 2.12], [8, 16.0, 2.12], [20, 9.38, 4.0], [23, 0.0, 0.12], [25, 11.84, 4.0], [3, 7.58, -2.68], [2, 9.7, 2.72], [22, 8.35, -2.83]], [0.0, -4.0, 16.0, 4.0]], [[3, 122001], [22, 295734], [23, 524458], [2, 931568], [20, 965610], [25, 982971], [8, 1005055], [12, 1005055]]], [[[[24, 50.31, 6.58], [27, 90.0, 0.0], [25, 65.58, 0.0]], [-10.0, 0.0, 90.0, 32.0]], [[24, 308809], [25, 327697], [27, 349525]]], [[[[18, 6.0, -4.0], [8, 6.0, -4.0]], [-10.0, -4.0, 6.0, 28.0]], [[8, 349525], [18, 349525]]]], [[[[[13, -10.0, 27.92], [18, -9.16, 5.81]], [-10.0, 0.0, -10.0, 32.0]], [[18, 35458], [13, 666274]]], [[[[24, -10.0, 32.0], [10, -10.0, 32.0], [8, -10.0, 29.8], [29, -10.0, 6.27], [21, -10.0, 13.14], [14, -10.0, 17.37]], [-10.0, 0.0, -10.0, 32.0]], [[29, 41088], [21, 165920], [14, 526474], [8, 690818], [10, 699050], [24, 699050]]], [[[[8, 7.79, 32.0], [14, 7.79, 32.0], [4, 20.76, 28.84], [24, 5.0, 12.55], [16, 11.25, 15.97], [3, 5.0, 8.32], [19, 5.0, 9.9], [15, 4.07, 0.0], [20, 5.0, 28.49]], [5.0, 0.0, 21.0, 32.0]], [[15, 0], [3, 131208], [19, 133792], [24, 164354], [16, 256938], [20, 688298], [8, 716718], [14, 716718], [4, 1038216]]], [[[[1, -10.0, -4.0], [17, -10.0, -4.0], [18, 6.0, 0.25], [10, 1.71, 0.39], [23, -0.65, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[1, 0], [17, 0], [23, 266516], [10, 810579], [18, 875861]]], [[[[2, 5.42, -3.91], [24, 5.0, -4.0], [8, 5.0, 4.0], [7, 5.0, 4.0], [12, 5.0, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[24, 0], [2, 138], [7, 699050], [8, 699050], [12, 699050]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[3, 105.0, 3.0], [2, 105.0, 3.0], [20, 33.46, 28.0], [7, 79.71, 28.0]], [5.0, -4.0, 105.0, 28.0]], [[2, 392533], [3, 392533], [20, 765615], [7, 983035]]], [[[[25, 10.0, 5.64], [8, 10.0, 5.64], [6, 10.0, 6.72], [5, 0.0, 8.0]], [0.0, 0.0, 10.0, 8.0]], [[5, 699050], [8, 915287], [25, 915287], [6, 1013749]]]], [[[[[27, 5.0, 7.71], [11, 5.0, 8.0], [17, 5.0, 6.94], [21, 5.0, 2.6], [9, 5.0, 2.12], [10, 5.69, 0.0], [23, 5.0, 8.0], [29, 5.36, 8.0], [19, 5.0, 8.0], [7, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[10, 0], [9, 131242], [21, 139424], [17, 666240], [27, 696968], [7, 699050], [11, 699050], [19, 699050], [23, 699050], [29, 699050]]], [[[[18, 0.0, 32.0], [8, 16.0, 18.69]], [0.0, 0.0, 16.0, 32.0]], [[18, 699050], [8, 882557]]], [[[[26, 1.65, 0.0], [12, 0.0, 7.0], [2, 0.0, 6.65], [29, 10.0, 6.7], [6, 1.83, 8.48], [27, 6.69, 8.0], [14, 10.0, 8.0], [9, 10.0, 1.99]], [0.0, 0.0, 10.0, 8.0]], [[26, 17472], [9, 393213], [2, 664074], [12, 688128], [6, 716783], [27, 978683], [29, 1013719], [14, 1048575]]], [[[[19, 0.0, 0.0], [20, 0.0, 8.62], [17, -0.27, 0.0]], [0.0, 0.0, 0.0, 8.0]], [[17, 0], [19, 0], [20, 699050]]], [[[[26, 0.0, -4.0], [4, -0.48, -0.87], [9, 0.0, -2.79], [28, 0.0, -4.0], [10, 0.0, 28.0], [18, 0.0, -2.0], [5, 0.0, -4.0], [21, 0.0, 7.41]], [0.0, -4.0, 0.0, 28.0]], [[5, 0], [26, 0], [28, 0], [9, 2088], [18, 8192], [4, 10272], [21, 141474], [10, 699050]]], [[[[25, 5.0, 15.89], [11, 14.68, 32.0], [1, 13.39, 26.2], [21, 15.0, 8.56], [15, 15.0, 32.0]], [5.0, 0.0, 15.0, 32.0]], [[25, 174752], [21, 481111], [1, 995693], [11, 1047551], [15, 1048575]]], [[[[18, 15.0, 0.0], [6, 15.0, 0.0], [20, 5.0, 0.0]], [5.0, 0.0, 15.0, 8.0]], [[20, 0], [6, 349525], [18, 349525]]], [[[[28, 6.64, 32.0], [24, 1.44, 32.0], [12, 10.0, 21.67], [17, 0.0, 18.06], [6, 0.0, 17.6], [29, 4.94, 21.87], [9, 9.22, 7.36], [16, 0.08, 32.0], [13, 8.58, 1.11], [22, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[22, 0], [13, 334942], [9, 388490], [6, 526858], [17, 532482], [29, 647115], [16, 699114], [24, 715695], [12, 909175], [28, 978623]]]], [[[[[12, 0.0, 3.63], [24, 0.0, 3.63], [14, 0.0, 6.97]], [0.0, 0.0, 0.0, 8.0]], [[12, 172544], [24, 172544], [14, 666272]]], [[[[9, 21.0, -4.0], [7, 21.0, -4.0], [15, 19.51, 4.95], [10, 5.0, -4.0], [25, 21.0, -4.0], [12, 17.72, 4.0], [26, 21.0, -4.0], [8, 6.03, -4.0]], [5.0, -4.0, 21.0, 4.0]], [[10, 0], [8, 4097], [7, 349525], [9, 349525], [25, 349525], [26, 349525], [12, 1027838], [15, 1044138]]], [[[[27, 5.0, 0.0], [19, 4.22, 0.0], [10, 5.0, 8.05], [25, 5.0, 1.04], [12, 5.01, 8.0], [28, 5.0, 0.0], [23, 5.0, 0.0]], [5.0, 0.0, 5.0, 8.0]], [[19, 0], [23, 0], [27, 0], [28, 0], [25, 32802], [10, 699050], [12, 699050]]], [[[[8, -2.58, 0.0], [27, -10.0, 31.04], [19, -2.08, 28.72], [7, -10.0, 5.9], [14, 3.12, 0.0], [29, 6.0, 13.1], [11, -10.0, 3.02]], [-10.0, 0.0, 6.0, 32.0]], [[11, 10240], [7, 35488], [8, 86340], [14, 331797], [29, 515423], [27, 698370], [19, 776046]]], [[[[2, 0.0, 28.0], [1, 0.0, 28.0], [27, 0.0, -4.3], [22, 0.0, 10.81], [12, 0.0, 17.36], [9, 0.0, 28.0], [6, 0.0, 20.38], [28, 0.0, 27.4], [16, -0.31, 28.0], [18, 0.0, 9.16], [13, -0.36, 9.17]], [0.0, -4.0, 0.0, 28.0]], [[27, 0], [13, 165922], [18, 165922], [22, 172674], [12, 559242], [6, 655520], [28, 698528], [1, 699050], [2, 699050], [9, 699050], [16, 699050]]], [[[[26, 1.35, 0.0], [27, 1.35, 0.0], [28, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[28, 0], [26, 16452], [27, 16452]]], [[[[20, 40.86, 27.56], [16, 40.86, 27.56], [24, 76.52, 0.0], [29, 105.0, 32.0], [3, 105.0, 32.0], [22, 93.26, 32.0], [13, 5.0, 20.19], [4, 44.54, 32.0], [11, 76.3, 28.2]], [5.0, 0.0, 105.0, 32.0]], [[24, 282960], [13, 557096], [16, 736855], [20, 736855], [4, 781242], [11, 971116], [22, 1043135], [3, 1048575], [29, 1048575]]], [[[[23, 5.01, 28.0], [14, 5.01, 28.0], [2, 9.12, 21.41], [5, 15.0, -4.0], [10, 9.98, 5.44], [28, 15.0, -4.0], [6, 8.26, 8.74], [16, 13.41, 18.61], [3, 5.0, 1.35]], [5.0, -4.0, 15.0, 28.0]], [[3, 34954], [10, 220665], [6, 234107], [5, 349525], [28, 349525], [14, 699051], [23, 699051], [2, 740531], [16, 897883]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("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 |
|---|---|---|---|
| case 0 | [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]] | [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]] | Passed |
| case 1 | [[29, 16709], [13, 699050]] | [[29, 16709], [13, 699050]] | Passed |
| case 2 | [[28, 180318], [6, 657954]] | [[28, 180318], [6, 657954]] | Passed |
| case 3 | [[8, 349249], [29, 349249]] | [[8, 349249], [29, 349249]] | Passed |
| case 4 | [[26, 8320], [9, 8320], [5, 34976]] | [[9, 8320], [26, 8320], [5, 34976]] | Failed |
| case 5 | [[22, 70933], [18, 151537], [15, 151537], [23, 172074], [19, 279829], [29, 349525]] | [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]] | Failed |
| case 6 | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | Passed |
| case 7 | [[6, 333056], [18, 552312], [8, 746632]] | [[6, 333056], [18, 552312], [8, 746632]] | Passed |
SHA-256 / a62a2d3c784e1434b1718cf99456366e1bb32167d54c158979ea538655319cb6
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
N = 1
observations = []
def solve(pts, bounds):
def part(v):
v &= 0x3FF
v = (v | (v << 8)) & 0x00FF00FF
v = (v | (v << 4)) & 0x0F0F0F0F
v = (v | (v << 2)) & 0x33333333
v = (v | (v << 1)) & 0x55555555
return v
def quant(c, lo, hi):
if hi <= lo:
return 0
return min(1023, max(0, math.floor((c - lo) / (hi - lo) * 1024)))
out = []
for i, x, y in pts:
code = part(quant(x, bounds[0], bounds[2])) | (part(quant(y, bounds[1], bounds[3])) << 1)
out.append([i, code])
out.sort(key=lambda r: (r[1], r[0]))
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[[[2, 15.68, 3.56], [3, 5.0, 2.99], [23, 15.0, -1.89], [7, 15.0, -4.0], [11, 15.0, -4.0], [4, 9.04, -4.22]], [5.0, -4.0, 15.0, 4.0]], [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]]], [[[[29, 15.14, -4.07], [13, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[29, 16709], [13, 699050]]], [[[[6, -10.0, 6.42], [28, -7.78, 3.03]], [-10.0, 0.0, 6.0, 8.0]], [[28, 180318], [6, 657954]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[26, -0.45, 2.25], [9, -0.45, 2.25], [5, 0.0, 5.4]], [0.0, 0.0, 10.0, 32.0]], [[9, 8320], [26, 8320], [5, 34976]]], [[[[18, 6.85, 5.88], [15, 6.85, 5.88], [22, 8.67, -4.37], [23, 5.0, 10.22], [29, 15.0, -4.0], [19, 11.79, -4.0]], [5.0, -4.0, 15.0, 28.0]], [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]]], [[[[29, -1.85, 30.67], [2, -10.0, 7.32], [22, 6.0, 0.0], [11, -2.97, 20.92], [4, 6.0, 32.0]], [-10.0, 0.0, 6.0, 32.0]], [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]]], [[[[6, -1.4, -4.0], [18, -8.16, 15.21], [8, -5.93, 22.33]], [-10.0, -4.0, 0.0, 28.0]], [[6, 333056], [18, 552312], [8, 746632]]]], [[[[[26, 15.0, 8.65], [14, 15.0, 8.65], [10, 9.54, -1.05], [28, 15.0, 28.0], [18, 15.0, 4.92], [4, 10.73, 28.0]], [5.0, -4.0, 15.0, 28.0]], [[10, 95144], [18, 481271], [14, 513909], [26, 513909], [4, 965358], [28, 1048575]]], [[[[14, 47.68, 0.0], [5, 100.0, 32.0], [2, 34.97, 0.0], [23, 100.0, 32.0], [6, 24.83, 13.56], [7, 26.2, 22.2], [9, 16.61, 32.0], [1, 100.0, 0.61]], [0.0, 0.0, 100.0, 32.0]], [[2, 70676], [14, 87104], [6, 188246], [1, 350047], [7, 630904], [9, 716526], [5, 1048575], [23, 1048575]]], [[[[28, 4.08, 8.0], [3, 4.08, 8.0], [11, 100.0, 0.0], [19, 86.81, 0.0], [29, 0.0, 0.0], [26, 60.01, 5.58], [10, 53.02, 8.0]], [0.0, 0.0, 100.0, 8.0]], [[29, 0], [19, 333120], [11, 349525], [3, 700139], [28, 700139], [26, 832668], [10, 961534]]], [[[[29, -10.0, -0.25], [3, -10.57, 28.0], [19, -10.0, -4.0], [9, -10.0, -4.0], [20, -10.0, -4.0]], [-10.0, -4.0, -10.0, 28.0]], [[9, 0], [19, 0], [20, 0], [29, 10880], [3, 699050]]], [[[[3, 5.0, -4.0], [2, 4.61, 3.19], [20, 5.0, 16.57], [23, 5.24, 1.38], [4, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [23, 34976], [2, 43048], [20, 557576], [4, 699050]]], [[[[12, 16.0, 2.12], [8, 16.0, 2.12], [20, 9.38, 4.0], [23, 0.0, 0.12], [25, 11.84, 4.0], [3, 7.58, -2.68], [2, 9.7, 2.72], [22, 8.35, -2.83]], [0.0, -4.0, 16.0, 4.0]], [[3, 122001], [22, 295734], [23, 524458], [2, 931568], [20, 965610], [25, 982971], [8, 1005055], [12, 1005055]]], [[[[24, 50.31, 6.58], [27, 90.0, 0.0], [25, 65.58, 0.0]], [-10.0, 0.0, 90.0, 32.0]], [[24, 308809], [25, 327697], [27, 349525]]], [[[[18, 6.0, -4.0], [8, 6.0, -4.0]], [-10.0, -4.0, 6.0, 28.0]], [[8, 349525], [18, 349525]]]], [[[[[13, -10.0, 27.92], [18, -9.16, 5.81]], [-10.0, 0.0, -10.0, 32.0]], [[18, 35458], [13, 666274]]], [[[[24, -10.0, 32.0], [10, -10.0, 32.0], [8, -10.0, 29.8], [29, -10.0, 6.27], [21, -10.0, 13.14], [14, -10.0, 17.37]], [-10.0, 0.0, -10.0, 32.0]], [[29, 41088], [21, 165920], [14, 526474], [8, 690818], [10, 699050], [24, 699050]]], [[[[8, 7.79, 32.0], [14, 7.79, 32.0], [4, 20.76, 28.84], [24, 5.0, 12.55], [16, 11.25, 15.97], [3, 5.0, 8.32], [19, 5.0, 9.9], [15, 4.07, 0.0], [20, 5.0, 28.49]], [5.0, 0.0, 21.0, 32.0]], [[15, 0], [3, 131208], [19, 133792], [24, 164354], [16, 256938], [20, 688298], [8, 716718], [14, 716718], [4, 1038216]]], [[[[1, -10.0, -4.0], [17, -10.0, -4.0], [18, 6.0, 0.25], [10, 1.71, 0.39], [23, -0.65, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[1, 0], [17, 0], [23, 266516], [10, 810579], [18, 875861]]], [[[[2, 5.42, -3.91], [24, 5.0, -4.0], [8, 5.0, 4.0], [7, 5.0, 4.0], [12, 5.0, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[24, 0], [2, 138], [7, 699050], [8, 699050], [12, 699050]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[3, 105.0, 3.0], [2, 105.0, 3.0], [20, 33.46, 28.0], [7, 79.71, 28.0]], [5.0, -4.0, 105.0, 28.0]], [[2, 392533], [3, 392533], [20, 765615], [7, 983035]]], [[[[25, 10.0, 5.64], [8, 10.0, 5.64], [6, 10.0, 6.72], [5, 0.0, 8.0]], [0.0, 0.0, 10.0, 8.0]], [[5, 699050], [8, 915287], [25, 915287], [6, 1013749]]]], [[[[[27, 5.0, 7.71], [11, 5.0, 8.0], [17, 5.0, 6.94], [21, 5.0, 2.6], [9, 5.0, 2.12], [10, 5.69, 0.0], [23, 5.0, 8.0], [29, 5.36, 8.0], [19, 5.0, 8.0], [7, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[10, 0], [9, 131242], [21, 139424], [17, 666240], [27, 696968], [7, 699050], [11, 699050], [19, 699050], [23, 699050], [29, 699050]]], [[[[18, 0.0, 32.0], [8, 16.0, 18.69]], [0.0, 0.0, 16.0, 32.0]], [[18, 699050], [8, 882557]]], [[[[26, 1.65, 0.0], [12, 0.0, 7.0], [2, 0.0, 6.65], [29, 10.0, 6.7], [6, 1.83, 8.48], [27, 6.69, 8.0], [14, 10.0, 8.0], [9, 10.0, 1.99]], [0.0, 0.0, 10.0, 8.0]], [[26, 17472], [9, 393213], [2, 664074], [12, 688128], [6, 716783], [27, 978683], [29, 1013719], [14, 1048575]]], [[[[19, 0.0, 0.0], [20, 0.0, 8.62], [17, -0.27, 0.0]], [0.0, 0.0, 0.0, 8.0]], [[17, 0], [19, 0], [20, 699050]]], [[[[26, 0.0, -4.0], [4, -0.48, -0.87], [9, 0.0, -2.79], [28, 0.0, -4.0], [10, 0.0, 28.0], [18, 0.0, -2.0], [5, 0.0, -4.0], [21, 0.0, 7.41]], [0.0, -4.0, 0.0, 28.0]], [[5, 0], [26, 0], [28, 0], [9, 2088], [18, 8192], [4, 10272], [21, 141474], [10, 699050]]], [[[[25, 5.0, 15.89], [11, 14.68, 32.0], [1, 13.39, 26.2], [21, 15.0, 8.56], [15, 15.0, 32.0]], [5.0, 0.0, 15.0, 32.0]], [[25, 174752], [21, 481111], [1, 995693], [11, 1047551], [15, 1048575]]], [[[[18, 15.0, 0.0], [6, 15.0, 0.0], [20, 5.0, 0.0]], [5.0, 0.0, 15.0, 8.0]], [[20, 0], [6, 349525], [18, 349525]]], [[[[28, 6.64, 32.0], [24, 1.44, 32.0], [12, 10.0, 21.67], [17, 0.0, 18.06], [6, 0.0, 17.6], [29, 4.94, 21.87], [9, 9.22, 7.36], [16, 0.08, 32.0], [13, 8.58, 1.11], [22, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[22, 0], [13, 334942], [9, 388490], [6, 526858], [17, 532482], [29, 647115], [16, 699114], [24, 715695], [12, 909175], [28, 978623]]]], [[[[[12, 0.0, 3.63], [24, 0.0, 3.63], [14, 0.0, 6.97]], [0.0, 0.0, 0.0, 8.0]], [[12, 172544], [24, 172544], [14, 666272]]], [[[[9, 21.0, -4.0], [7, 21.0, -4.0], [15, 19.51, 4.95], [10, 5.0, -4.0], [25, 21.0, -4.0], [12, 17.72, 4.0], [26, 21.0, -4.0], [8, 6.03, -4.0]], [5.0, -4.0, 21.0, 4.0]], [[10, 0], [8, 4097], [7, 349525], [9, 349525], [25, 349525], [26, 349525], [12, 1027838], [15, 1044138]]], [[[[27, 5.0, 0.0], [19, 4.22, 0.0], [10, 5.0, 8.05], [25, 5.0, 1.04], [12, 5.01, 8.0], [28, 5.0, 0.0], [23, 5.0, 0.0]], [5.0, 0.0, 5.0, 8.0]], [[19, 0], [23, 0], [27, 0], [28, 0], [25, 32802], [10, 699050], [12, 699050]]], [[[[8, -2.58, 0.0], [27, -10.0, 31.04], [19, -2.08, 28.72], [7, -10.0, 5.9], [14, 3.12, 0.0], [29, 6.0, 13.1], [11, -10.0, 3.02]], [-10.0, 0.0, 6.0, 32.0]], [[11, 10240], [7, 35488], [8, 86340], [14, 331797], [29, 515423], [27, 698370], [19, 776046]]], [[[[2, 0.0, 28.0], [1, 0.0, 28.0], [27, 0.0, -4.3], [22, 0.0, 10.81], [12, 0.0, 17.36], [9, 0.0, 28.0], [6, 0.0, 20.38], [28, 0.0, 27.4], [16, -0.31, 28.0], [18, 0.0, 9.16], [13, -0.36, 9.17]], [0.0, -4.0, 0.0, 28.0]], [[27, 0], [13, 165922], [18, 165922], [22, 172674], [12, 559242], [6, 655520], [28, 698528], [1, 699050], [2, 699050], [9, 699050], [16, 699050]]], [[[[26, 1.35, 0.0], [27, 1.35, 0.0], [28, 0.0, 0.0]], [0.0, 0.0, 10.0, 32.0]], [[28, 0], [26, 16452], [27, 16452]]], [[[[20, 40.86, 27.56], [16, 40.86, 27.56], [24, 76.52, 0.0], [29, 105.0, 32.0], [3, 105.0, 32.0], [22, 93.26, 32.0], [13, 5.0, 20.19], [4, 44.54, 32.0], [11, 76.3, 28.2]], [5.0, 0.0, 105.0, 32.0]], [[24, 282960], [13, 557096], [16, 736855], [20, 736855], [4, 781242], [11, 971116], [22, 1043135], [3, 1048575], [29, 1048575]]], [[[[23, 5.01, 28.0], [14, 5.01, 28.0], [2, 9.12, 21.41], [5, 15.0, -4.0], [10, 9.98, 5.44], [28, 15.0, -4.0], [6, 8.26, 8.74], [16, 13.41, 18.61], [3, 5.0, 1.35]], [5.0, -4.0, 15.0, 28.0]], [[3, 34954], [10, 220665], [6, 234107], [5, 349525], [28, 349525], [14, 699051], [23, 699051], [2, 740531], [16, 897883]]]]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("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 |
|---|---|---|---|
| case 0 | [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]] | [[4, 82257], [7, 349525], [11, 349525], [23, 480765], [3, 666280], [2, 1045887]] | Passed |
| case 1 | [[29, 16709], [13, 699050]] | [[29, 16709], [13, 699050]] | Passed |
| case 2 | [[28, 180318], [6, 657954]] | [[28, 180318], [6, 657954]] | Passed |
| case 3 | [[8, 349249], [29, 349249]] | [[8, 349249], [29, 349249]] | Passed |
| case 4 | [[9, 8320], [26, 8320], [5, 34976]] | [[9, 8320], [26, 8320], [5, 34976]] | Passed |
| case 5 | [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]] | [[22, 70933], [15, 151537], [18, 151537], [23, 172074], [19, 279829], [29, 349525]] | Passed |
| case 6 | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | Passed |
| case 7 | [[6, 333056], [18, 552312], [8, 746632]] | [[6, 333056], [18, 552312], [8, 746632]] | Passed |
SHA-256 / 6649e97a4892d0f0f6ed32c49debd0ba0910d1aea979fdc6d7d364d7ded26bae
Verification & scope
A deterministic bounded teaching model with stipulated toy conventions; not a production physics engine or spatial index. 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:51:00.281216+00:00.
Case digest / a996b440ddc3fd4a60ba4feaeadb0c86d0cc5a13980dac0d336e6063bb226844