FA-87566 / Collision detection broadphase / Open access
Morton code puts x in the odd bits · case 01
Sort order becomes y-major, contradicting the contract and cached codes.
ROOT CAUSE
The shift by one is applied to x instead of y.
VERIFIED REPAIR
x occupies even bits, y is shifted left by one.
Unsuccessful approach: Shifting y by ten concatenates instead of interleaving.
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])) << 1) | part(quant(y, bounds[1], bounds[3]))
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 = [[[[[[1, 21.0, -4.0], [29, 5.0, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[1, 349525], [29, 699050]]], [[[[1, -10.0, -4.0], [21, -10.0, -4.0], [12, -10.0, -0.83], [4, -10.0, 1.95], [8, -10.0, -4.0]], [-10.0, -4.0, -10.0, 4.0]], [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]]], [[[[6, 2.85, 3.05], [24, -5.0, -4.0], [8, -10.0, -4.0], [19, -10.18, 4.0], [21, 6.0, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[25, -5.57, 0.0], [20, -5.57, 0.0], [16, -10.0, 12.72], [13, -5.68, 0.0], [12, 0.0, 0.0], [29, -10.0, 6.8]], [-10.0, 0.0, 0.0, 32.0]], [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]]], [[[[23, 0.0, 1.5], [10, 0.0, 0.0], [19, 0.75, 7.07], [6, 0.0, 8.47], [26, 0.0, 0.0], [12, -0.61, 8.0], [24, 0.95, 6.8]], [0.0, 0.0, 0.0, 8.0]], [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]]], [[[[18, 0.0, 0.47], [22, 4.25, 4.25], [7, -0.65, -2.65], [4, 7.99, -3.15], [3, 10.0, -1.22], [5, 0.0, -4.0]], [0.0, -4.0, 10.0, 4.0]], [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]]], [[[[25, -10.0, -4.0], [21, -10.0, -4.0], [16, 82.55, 16.96], [18, -10.0, -4.0], [7, 75.11, 28.0], [1, 75.9, 27.07], [27, -10.0, -4.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]]]], [[[[[20, -10.0, 4.31], [17, -10.0, 9.59], [27, 55.15, 32.0], [14, 15.67, 0.0], [7, -10.0, 32.0], [22, 75.19, 18.72], [2, -10.0, 2.63]], [-10.0, 0.0, 90.0, 32.0]], [[2, 8736], [20, 32898], [14, 65556], [17, 133640], [7, 699050], [22, 865898], [27, 977903]]], [[[[17, 0.31, 0.97], [20, 0.0, -4.0], [19, 0.21, -4.52], [12, 0.0, -1.71], [9, 0.0, 4.0]], [0.0, -4.0, 0.0, 4.0]], [[19, 0], [20, 0], [12, 133154], [17, 535200], [9, 699050]]], [[[[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]]], [[[[27, 5.0, -0.72], [24, 5.0, -0.72], [9, 4.59, -4.0], [23, 4.45, -4.0], [19, 4.18, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[9, 0], [23, 0], [24, 165898], [27, 165898], [19, 699050]]], [[[[4, 5.0, 5.28], [22, 5.0, -2.21], [5, 5.23, -1.75], [3, 5.0, -4.0], [9, 5.0, -3.4], [21, 5.56, 28.0], [15, 5.0, -4.0], [6, 5.0, 18.35]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [15, 0], [9, 522], [22, 2690], [5, 8320], [4, 133248], [6, 565386], [21, 699050]]], [[[[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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[12, 7.03, 8.99], [10, 15.0, 2.29], [23, 8.47, 3.93], [25, 12.21, 7.56]], [5.0, 0.0, 15.0, 8.0]], [[23, 245295], [10, 482679], [12, 719615], [25, 980014]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[25, 0.71, -4.92], [3, 0.0, 4.0], [14, 0.94, 4.27], [19, -0.4, 2.92], [28, -0.71, 4.0], [9, 5.44, 3.44]], [0.0, -4.0, 10.0, 4.0]], [[25, 4160], [19, 666146], [3, 699050], [28, 699050], [14, 704170], [9, 954065]]], [[[[6, 70.15, -4.0], [11, 0.0, 2.08], [18, 100.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[6, 282708], [11, 655496], [18, 1048575]]], [[[[7, 5.0, 5.02], [22, 5.0, 5.02], [6, 105.0, 6.44]], [5.0, 0.0, 105.0, 8.0]], [[7, 557064], [22, 557064], [6, 1007573]]], [[[[10, 0.0, 0.0], [21, 0.0, 0.0], [26, -1.18, 0.77]], [-10.0, 0.0, 0.0, 8.0]], [[10, 349525], [21, 349525], [26, 354333]]], [[[[7, 5.0, 10.28], [11, 5.0, 10.28]], [5.0, 0.0, 21.0, 32.0]], [[7, 139392], [11, 139392]]], [[[[19, 0.0, 0.55], [3, 0.0, 0.55], [10, 2.91, 7.29], [15, 0.82, 28.0], [29, 5.77, 28.0], [21, 0.51, -4.0], [26, 10.0, 3.2]], [0.0, -4.0, 10.0, 28.0]], [[21, 1296], [3, 33282], [19, 33282], [10, 208067], [26, 392573], [15, 703407], [29, 965374]]], [[[[12, -10.63, 2.72], [27, -10.63, 2.72], [6, -10.0, -4.0], [11, -10.0, -4.0], [26, -10.0, -1.88], [24, -10.0, 3.63], [8, -10.0, -2.42], [13, -10.0, 4.0]], [-10.0, -4.0, -10.0, 4.0]], [[6, 0], [11, 0], [8, 41096], [26, 131242], [12, 664224], [27, 664224], [24, 696832], [13, 699050]]]], [[[[[23, 24.94, 0.78], [13, 100.0, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[23, 32095], [13, 349525]]], [[[[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]]], [[[[16, 5.0, 3.32], [12, 5.0, 3.32], [26, 5.0, 8.0], [8, 5.0, 8.0], [10, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[12, 166016], [16, 166016], [8, 699050], [10, 699050], [26, 699050]]], [[[[26, 15.1, 32.0], [15, 16.0, 6.26], [28, 16.0, 1.69], [22, 0.0, 19.36], [19, 10.99, 32.0], [7, 4.17, 0.55], [18, 16.0, 32.0], [14, 9.32, 32.0], [27, 12.53, 16.28]], [0.0, 0.0, 16.0, 32.0]], [[7, 66118], [28, 352125], [15, 390613], [22, 534666], [27, 853121], [14, 965562], [19, 978943], [26, 1047230], [18, 1048575]]], [[[[29, 0.0, 32.0], [10, -0.21, 0.0], [23, -0.32, 0.0], [26, 0.0, 30.2]], [0.0, 0.0, 0.0, 32.0]], [[10, 0], [23, 0], [26, 696360], [29, 699050]]], [[[[5, 0.0, 18.27], [7, 7.94, 15.88], [27, 0.0, 13.08], [22, 0.0, -4.0], [23, 16.0, -4.0], [11, 15.0, 28.0], [17, 16.0, 28.0]], [0.0, -4.0, 16.0, 28.0]], [[22, 0], [23, 349525], [27, 526344], [5, 565376], [7, 622576], [11, 1047210], [17, 1048575]]], [[[[4, 13.33, 13.88], [5, 13.33, 13.88], [23, -10.0, 28.0], [17, -10.0, 28.0], [18, -10.0, -4.0], [19, -10.0, 28.0], [8, 90.0, -4.0], [6, 90.0, -4.0], [25, 83.18, -4.0], [29, 42.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [25, 345412], [6, 349525], [8, 349525], [4, 548596], [5, 548596], [17, 699050], [19, 699050], [23, 699050], [29, 961466]]], [[[[14, 90.0, 28.0], [15, 90.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[14, 1048575], [15, 1048575]]]], [[[[[21, 0.12, 0.0], [19, 7.02, 32.0], [28, 8.31, 21.26], [26, 16.0, 12.31], [8, 0.0, 32.0], [3, 15.19, 32.0], [20, 16.0, 0.0], [4, 0.0, 18.69], [29, 0.0, 24.15], [24, 16.0, 28.82], [11, 2.01, 6.28]], [0.0, 0.0, 16.0, 32.0]], [[21, 21], [11, 57472], [20, 349525], [26, 513495], [4, 533032], [29, 655392], [8, 699050], [19, 785067], [28, 821637], [24, 1038301], [3, 1047290]]], [[[[5, 8.05, -0.06], [8, 19.59, -4.0], [16, 13.1, 14.81]], [5.0, -4.0, 21.0, 28.0]], [[5, 31405], [8, 345105], [16, 795286]]], [[[[9, 21.0, 28.0], [10, 21.0, 28.0], [16, 18.49, 21.34], [22, 5.0, -4.0], [3, 5.7, 4.57], [12, 5.0, 17.62], [7, 5.0, 24.42], [18, 18.67, 28.0], [27, 18.9, -4.0], [26, 21.0, 28.0]], [5.0, -4.0, 21.0, 28.0]], [[22, 0], [3, 132696], [27, 333121], [12, 559626], [7, 688290], [16, 989661], [18, 1031918], [9, 1048575], [10, 1048575], [26, 1048575]]], [[[[25, 10.0, 1.85], [20, 9.05, 4.3], [3, 10.0, 0.0], [12, 4.47, 8.0], [4, 2.3, 0.0], [24, 0.8, 5.16], [16, 6.38, 0.0], [17, 0.85, 5.26], [27, 10.67, 2.18]], [0.0, 0.0, 10.0, 8.0]], [[4, 21573], [16, 278609], [3, 349525], [25, 392693], [27, 481151], [24, 561953], [17, 563479], [12, 785131], [20, 870780]]], [[[[2, 0.0, 4.0], [10, 0.0, 4.0], [28, 100.0, -2.41], [20, 57.46, 1.22], [29, 100.0, -4.0], [12, 0.0, -3.72], [26, 0.0, -0.9], [23, 74.85, 3.5], [6, 65.21, 4.0], [19, 52.24, -2.41]], [0.0, -4.0, 100.0, 4.0]], [[12, 2058], [26, 164000], [19, 303518], [29, 349525], [28, 390623], [2, 699050], [10, 699050], [20, 824048], [6, 977903], [23, 980308]]], [[[[7, 0.0, 8.0], [29, 0.0, 8.0], [13, 5.86, 8.0], [12, 10.0, 6.9], [19, 0.0, 0.0], [24, 5.31, 0.57], [3, 3.24, 0.0], [5, 2.21, 8.0], [21, 5.53, 0.0], [8, 10.1, 0.0]], [0.0, 0.0, 10.0, 8.0]], [[19, 0], [3, 69701], [21, 263444], [24, 270805], [8, 349525], [7, 699050], [29, 699050], [5, 720558], [13, 965610], [12, 1015647]]], [[[[1, 21.0, 0.0], [9, 9.38, 21.29], [15, 5.0, 7.16], [14, 10.11, 10.75], [16, 5.0, 32.0], [29, 16.79, 32.0], [13, 5.0, 0.0], [23, 5.0, 32.0], [11, 21.0, 26.92]], [5.0, 0.0, 21.0, 32.0]], [[13, 0], [15, 43042], [14, 209557], [1, 349525], [9, 625090], [16, 699050], [23, 699050], [29, 982958], [11, 1013751]]], [[[[22, 5.0, 2.81], [6, 14.42, 4.0], [12, 8.46, -4.97], [14, 20.97, -4.0], [13, 5.0, 2.87], [17, 12.87, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[12, 20817], [14, 349524], [22, 665642], [13, 665770], [17, 786367], [6, 965614]]]]]
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 | [[29, 349525], [1, 699050]] | [[1, 349525], [29, 699050]] | Failed |
| case 1 | [[1, 0], [8, 0], [21, 0], [12, 82193], [4, 283969]] | [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]] | Failed |
| case 2 | [[8, 0], [24, 139264], [19, 349525], [21, 699050], [6, 1002044]] | [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]] | Failed |
| case 3 | [[8, 698498], [29, 698498]] | [[8, 349249], [29, 349249]] | Failed |
| case 4 | [[29, 20801], [16, 82197], [13, 166536], [20, 172066], [25, 172066], [12, 699050]] | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | Failed |
| case 5 | [[10, 0], [26, 0], [23, 20480], [24, 332820], [19, 344128], [6, 349525], [12, 349525]] | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | Failed |
| case 6 | [[5, 0], [7, 17488], [18, 263504], [22, 515935], [4, 663128], [3, 769711]] | [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]] | Failed |
| case 7 | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 969566], [1, 1014958], [7, 1015167]] | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]] | Failed |
SHA-256 / 07316cb0968367f9f0cd4eb9afe90f38067fd5e780d17734ab780e2485f5f8b4
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])) << 10)
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 = [[[[[[1, 21.0, -4.0], [29, 5.0, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[1, 349525], [29, 699050]]], [[[[1, -10.0, -4.0], [21, -10.0, -4.0], [12, -10.0, -0.83], [4, -10.0, 1.95], [8, -10.0, -4.0]], [-10.0, -4.0, -10.0, 4.0]], [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]]], [[[[6, 2.85, 3.05], [24, -5.0, -4.0], [8, -10.0, -4.0], [19, -10.18, 4.0], [21, 6.0, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[25, -5.57, 0.0], [20, -5.57, 0.0], [16, -10.0, 12.72], [13, -5.68, 0.0], [12, 0.0, 0.0], [29, -10.0, 6.8]], [-10.0, 0.0, 0.0, 32.0]], [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]]], [[[[23, 0.0, 1.5], [10, 0.0, 0.0], [19, 0.75, 7.07], [6, 0.0, 8.47], [26, 0.0, 0.0], [12, -0.61, 8.0], [24, 0.95, 6.8]], [0.0, 0.0, 0.0, 8.0]], [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]]], [[[[18, 0.0, 0.47], [22, 4.25, 4.25], [7, -0.65, -2.65], [4, 7.99, -3.15], [3, 10.0, -1.22], [5, 0.0, -4.0]], [0.0, -4.0, 10.0, 4.0]], [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]]], [[[[25, -10.0, -4.0], [21, -10.0, -4.0], [16, 82.55, 16.96], [18, -10.0, -4.0], [7, 75.11, 28.0], [1, 75.9, 27.07], [27, -10.0, -4.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]]]], [[[[[20, -10.0, 4.31], [17, -10.0, 9.59], [27, 55.15, 32.0], [14, 15.67, 0.0], [7, -10.0, 32.0], [22, 75.19, 18.72], [2, -10.0, 2.63]], [-10.0, 0.0, 90.0, 32.0]], [[2, 8736], [20, 32898], [14, 65556], [17, 133640], [7, 699050], [22, 865898], [27, 977903]]], [[[[17, 0.31, 0.97], [20, 0.0, -4.0], [19, 0.21, -4.52], [12, 0.0, -1.71], [9, 0.0, 4.0]], [0.0, -4.0, 0.0, 4.0]], [[19, 0], [20, 0], [12, 133154], [17, 535200], [9, 699050]]], [[[[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]]], [[[[27, 5.0, -0.72], [24, 5.0, -0.72], [9, 4.59, -4.0], [23, 4.45, -4.0], [19, 4.18, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[9, 0], [23, 0], [24, 165898], [27, 165898], [19, 699050]]], [[[[4, 5.0, 5.28], [22, 5.0, -2.21], [5, 5.23, -1.75], [3, 5.0, -4.0], [9, 5.0, -3.4], [21, 5.56, 28.0], [15, 5.0, -4.0], [6, 5.0, 18.35]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [15, 0], [9, 522], [22, 2690], [5, 8320], [4, 133248], [6, 565386], [21, 699050]]], [[[[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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[12, 7.03, 8.99], [10, 15.0, 2.29], [23, 8.47, 3.93], [25, 12.21, 7.56]], [5.0, 0.0, 15.0, 8.0]], [[23, 245295], [10, 482679], [12, 719615], [25, 980014]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[25, 0.71, -4.92], [3, 0.0, 4.0], [14, 0.94, 4.27], [19, -0.4, 2.92], [28, -0.71, 4.0], [9, 5.44, 3.44]], [0.0, -4.0, 10.0, 4.0]], [[25, 4160], [19, 666146], [3, 699050], [28, 699050], [14, 704170], [9, 954065]]], [[[[6, 70.15, -4.0], [11, 0.0, 2.08], [18, 100.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[6, 282708], [11, 655496], [18, 1048575]]], [[[[7, 5.0, 5.02], [22, 5.0, 5.02], [6, 105.0, 6.44]], [5.0, 0.0, 105.0, 8.0]], [[7, 557064], [22, 557064], [6, 1007573]]], [[[[10, 0.0, 0.0], [21, 0.0, 0.0], [26, -1.18, 0.77]], [-10.0, 0.0, 0.0, 8.0]], [[10, 349525], [21, 349525], [26, 354333]]], [[[[7, 5.0, 10.28], [11, 5.0, 10.28]], [5.0, 0.0, 21.0, 32.0]], [[7, 139392], [11, 139392]]], [[[[19, 0.0, 0.55], [3, 0.0, 0.55], [10, 2.91, 7.29], [15, 0.82, 28.0], [29, 5.77, 28.0], [21, 0.51, -4.0], [26, 10.0, 3.2]], [0.0, -4.0, 10.0, 28.0]], [[21, 1296], [3, 33282], [19, 33282], [10, 208067], [26, 392573], [15, 703407], [29, 965374]]], [[[[12, -10.63, 2.72], [27, -10.63, 2.72], [6, -10.0, -4.0], [11, -10.0, -4.0], [26, -10.0, -1.88], [24, -10.0, 3.63], [8, -10.0, -2.42], [13, -10.0, 4.0]], [-10.0, -4.0, -10.0, 4.0]], [[6, 0], [11, 0], [8, 41096], [26, 131242], [12, 664224], [27, 664224], [24, 696832], [13, 699050]]]], [[[[[23, 24.94, 0.78], [13, 100.0, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[23, 32095], [13, 349525]]], [[[[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]]], [[[[16, 5.0, 3.32], [12, 5.0, 3.32], [26, 5.0, 8.0], [8, 5.0, 8.0], [10, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[12, 166016], [16, 166016], [8, 699050], [10, 699050], [26, 699050]]], [[[[26, 15.1, 32.0], [15, 16.0, 6.26], [28, 16.0, 1.69], [22, 0.0, 19.36], [19, 10.99, 32.0], [7, 4.17, 0.55], [18, 16.0, 32.0], [14, 9.32, 32.0], [27, 12.53, 16.28]], [0.0, 0.0, 16.0, 32.0]], [[7, 66118], [28, 352125], [15, 390613], [22, 534666], [27, 853121], [14, 965562], [19, 978943], [26, 1047230], [18, 1048575]]], [[[[29, 0.0, 32.0], [10, -0.21, 0.0], [23, -0.32, 0.0], [26, 0.0, 30.2]], [0.0, 0.0, 0.0, 32.0]], [[10, 0], [23, 0], [26, 696360], [29, 699050]]], [[[[5, 0.0, 18.27], [7, 7.94, 15.88], [27, 0.0, 13.08], [22, 0.0, -4.0], [23, 16.0, -4.0], [11, 15.0, 28.0], [17, 16.0, 28.0]], [0.0, -4.0, 16.0, 28.0]], [[22, 0], [23, 349525], [27, 526344], [5, 565376], [7, 622576], [11, 1047210], [17, 1048575]]], [[[[4, 13.33, 13.88], [5, 13.33, 13.88], [23, -10.0, 28.0], [17, -10.0, 28.0], [18, -10.0, -4.0], [19, -10.0, 28.0], [8, 90.0, -4.0], [6, 90.0, -4.0], [25, 83.18, -4.0], [29, 42.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [25, 345412], [6, 349525], [8, 349525], [4, 548596], [5, 548596], [17, 699050], [19, 699050], [23, 699050], [29, 961466]]], [[[[14, 90.0, 28.0], [15, 90.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[14, 1048575], [15, 1048575]]]], [[[[[21, 0.12, 0.0], [19, 7.02, 32.0], [28, 8.31, 21.26], [26, 16.0, 12.31], [8, 0.0, 32.0], [3, 15.19, 32.0], [20, 16.0, 0.0], [4, 0.0, 18.69], [29, 0.0, 24.15], [24, 16.0, 28.82], [11, 2.01, 6.28]], [0.0, 0.0, 16.0, 32.0]], [[21, 21], [11, 57472], [20, 349525], [26, 513495], [4, 533032], [29, 655392], [8, 699050], [19, 785067], [28, 821637], [24, 1038301], [3, 1047290]]], [[[[5, 8.05, -0.06], [8, 19.59, -4.0], [16, 13.1, 14.81]], [5.0, -4.0, 21.0, 28.0]], [[5, 31405], [8, 345105], [16, 795286]]], [[[[9, 21.0, 28.0], [10, 21.0, 28.0], [16, 18.49, 21.34], [22, 5.0, -4.0], [3, 5.7, 4.57], [12, 5.0, 17.62], [7, 5.0, 24.42], [18, 18.67, 28.0], [27, 18.9, -4.0], [26, 21.0, 28.0]], [5.0, -4.0, 21.0, 28.0]], [[22, 0], [3, 132696], [27, 333121], [12, 559626], [7, 688290], [16, 989661], [18, 1031918], [9, 1048575], [10, 1048575], [26, 1048575]]], [[[[25, 10.0, 1.85], [20, 9.05, 4.3], [3, 10.0, 0.0], [12, 4.47, 8.0], [4, 2.3, 0.0], [24, 0.8, 5.16], [16, 6.38, 0.0], [17, 0.85, 5.26], [27, 10.67, 2.18]], [0.0, 0.0, 10.0, 8.0]], [[4, 21573], [16, 278609], [3, 349525], [25, 392693], [27, 481151], [24, 561953], [17, 563479], [12, 785131], [20, 870780]]], [[[[2, 0.0, 4.0], [10, 0.0, 4.0], [28, 100.0, -2.41], [20, 57.46, 1.22], [29, 100.0, -4.0], [12, 0.0, -3.72], [26, 0.0, -0.9], [23, 74.85, 3.5], [6, 65.21, 4.0], [19, 52.24, -2.41]], [0.0, -4.0, 100.0, 4.0]], [[12, 2058], [26, 164000], [19, 303518], [29, 349525], [28, 390623], [2, 699050], [10, 699050], [20, 824048], [6, 977903], [23, 980308]]], [[[[7, 0.0, 8.0], [29, 0.0, 8.0], [13, 5.86, 8.0], [12, 10.0, 6.9], [19, 0.0, 0.0], [24, 5.31, 0.57], [3, 3.24, 0.0], [5, 2.21, 8.0], [21, 5.53, 0.0], [8, 10.1, 0.0]], [0.0, 0.0, 10.0, 8.0]], [[19, 0], [3, 69701], [21, 263444], [24, 270805], [8, 349525], [7, 699050], [29, 699050], [5, 720558], [13, 965610], [12, 1015647]]], [[[[1, 21.0, 0.0], [9, 9.38, 21.29], [15, 5.0, 7.16], [14, 10.11, 10.75], [16, 5.0, 32.0], [29, 16.79, 32.0], [13, 5.0, 0.0], [23, 5.0, 32.0], [11, 21.0, 26.92]], [5.0, 0.0, 21.0, 32.0]], [[13, 0], [15, 43042], [14, 209557], [1, 349525], [9, 625090], [16, 699050], [23, 699050], [29, 982958], [11, 1013751]]], [[[[22, 5.0, 2.81], [6, 14.42, 4.0], [12, 8.46, -4.97], [14, 20.97, -4.0], [13, 5.0, 2.87], [17, 12.87, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[12, 20817], [14, 349524], [22, 665642], [13, 665770], [17, 786367], [6, 965614]]]]]
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 | [[1, 349525], [29, 357913600]] | [[1, 349525], [29, 699050]] | Failed |
| case 1 | [[1, 0], [8, 0], [21, 0], [12, 84165632], [4, 290784256]] | [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]] | Failed |
| case 2 | [[8, 0], [24, 69632], [21, 349525], [6, 352670996], [19, 357913600]] | [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]] | Failed |
| case 3 | [[8, 349249], [29, 349249]] | [[8, 349249], [29, 349249]] | Passed |
| case 4 | [[13, 83268], [20, 86033], [25, 86033], [12, 349525], [29, 21300224], [16, 84169728]] | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | Failed |
| case 5 | [[10, 0], [26, 0], [23, 20971520], [24, 340807680], [19, 352387072], [6, 357913600], [12, 357913600]] | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | Failed |
| case 6 | [[5, 0], [4, 5588228], [7, 17907712], [3, 72701269], [18, 269828096], [22, 357913861]] | [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]] | Failed |
| case 7 | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 285562117], [1, 357897301], [7, 357913621]] | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]] | Failed |
SHA-256 / a09fb35f4f98fde9f6f408af574222aaaf9be592ff70ef541cefe56d53889810
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 = [[[[[[1, 21.0, -4.0], [29, 5.0, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[1, 349525], [29, 699050]]], [[[[1, -10.0, -4.0], [21, -10.0, -4.0], [12, -10.0, -0.83], [4, -10.0, 1.95], [8, -10.0, -4.0]], [-10.0, -4.0, -10.0, 4.0]], [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]]], [[[[6, 2.85, 3.05], [24, -5.0, -4.0], [8, -10.0, -4.0], [19, -10.18, 4.0], [21, 6.0, -4.0]], [-10.0, -4.0, 6.0, 4.0]], [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[25, -5.57, 0.0], [20, -5.57, 0.0], [16, -10.0, 12.72], [13, -5.68, 0.0], [12, 0.0, 0.0], [29, -10.0, 6.8]], [-10.0, 0.0, 0.0, 32.0]], [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]]], [[[[23, 0.0, 1.5], [10, 0.0, 0.0], [19, 0.75, 7.07], [6, 0.0, 8.47], [26, 0.0, 0.0], [12, -0.61, 8.0], [24, 0.95, 6.8]], [0.0, 0.0, 0.0, 8.0]], [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]]], [[[[18, 0.0, 0.47], [22, 4.25, 4.25], [7, -0.65, -2.65], [4, 7.99, -3.15], [3, 10.0, -1.22], [5, 0.0, -4.0]], [0.0, -4.0, 10.0, 4.0]], [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]]], [[[[25, -10.0, -4.0], [21, -10.0, -4.0], [16, 82.55, 16.96], [18, -10.0, -4.0], [7, 75.11, 28.0], [1, 75.9, 27.07], [27, -10.0, -4.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]]]], [[[[[20, -10.0, 4.31], [17, -10.0, 9.59], [27, 55.15, 32.0], [14, 15.67, 0.0], [7, -10.0, 32.0], [22, 75.19, 18.72], [2, -10.0, 2.63]], [-10.0, 0.0, 90.0, 32.0]], [[2, 8736], [20, 32898], [14, 65556], [17, 133640], [7, 699050], [22, 865898], [27, 977903]]], [[[[17, 0.31, 0.97], [20, 0.0, -4.0], [19, 0.21, -4.52], [12, 0.0, -1.71], [9, 0.0, 4.0]], [0.0, -4.0, 0.0, 4.0]], [[19, 0], [20, 0], [12, 133154], [17, 535200], [9, 699050]]], [[[[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]]], [[[[27, 5.0, -0.72], [24, 5.0, -0.72], [9, 4.59, -4.0], [23, 4.45, -4.0], [19, 4.18, 4.0]], [5.0, -4.0, 5.0, 4.0]], [[9, 0], [23, 0], [24, 165898], [27, 165898], [19, 699050]]], [[[[4, 5.0, 5.28], [22, 5.0, -2.21], [5, 5.23, -1.75], [3, 5.0, -4.0], [9, 5.0, -3.4], [21, 5.56, 28.0], [15, 5.0, -4.0], [6, 5.0, 18.35]], [5.0, -4.0, 5.0, 28.0]], [[3, 0], [15, 0], [9, 522], [22, 2690], [5, 8320], [4, 133248], [6, 565386], [21, 699050]]], [[[[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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[12, 7.03, 8.99], [10, 15.0, 2.29], [23, 8.47, 3.93], [25, 12.21, 7.56]], [5.0, 0.0, 15.0, 8.0]], [[23, 245295], [10, 482679], [12, 719615], [25, 980014]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[25, 0.71, -4.92], [3, 0.0, 4.0], [14, 0.94, 4.27], [19, -0.4, 2.92], [28, -0.71, 4.0], [9, 5.44, 3.44]], [0.0, -4.0, 10.0, 4.0]], [[25, 4160], [19, 666146], [3, 699050], [28, 699050], [14, 704170], [9, 954065]]], [[[[6, 70.15, -4.0], [11, 0.0, 2.08], [18, 100.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[6, 282708], [11, 655496], [18, 1048575]]], [[[[7, 5.0, 5.02], [22, 5.0, 5.02], [6, 105.0, 6.44]], [5.0, 0.0, 105.0, 8.0]], [[7, 557064], [22, 557064], [6, 1007573]]], [[[[10, 0.0, 0.0], [21, 0.0, 0.0], [26, -1.18, 0.77]], [-10.0, 0.0, 0.0, 8.0]], [[10, 349525], [21, 349525], [26, 354333]]], [[[[7, 5.0, 10.28], [11, 5.0, 10.28]], [5.0, 0.0, 21.0, 32.0]], [[7, 139392], [11, 139392]]], [[[[19, 0.0, 0.55], [3, 0.0, 0.55], [10, 2.91, 7.29], [15, 0.82, 28.0], [29, 5.77, 28.0], [21, 0.51, -4.0], [26, 10.0, 3.2]], [0.0, -4.0, 10.0, 28.0]], [[21, 1296], [3, 33282], [19, 33282], [10, 208067], [26, 392573], [15, 703407], [29, 965374]]], [[[[12, -10.63, 2.72], [27, -10.63, 2.72], [6, -10.0, -4.0], [11, -10.0, -4.0], [26, -10.0, -1.88], [24, -10.0, 3.63], [8, -10.0, -2.42], [13, -10.0, 4.0]], [-10.0, -4.0, -10.0, 4.0]], [[6, 0], [11, 0], [8, 41096], [26, 131242], [12, 664224], [27, 664224], [24, 696832], [13, 699050]]]], [[[[[23, 24.94, 0.78], [13, 100.0, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[23, 32095], [13, 349525]]], [[[[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]]], [[[[16, 5.0, 3.32], [12, 5.0, 3.32], [26, 5.0, 8.0], [8, 5.0, 8.0], [10, 5.0, 8.0]], [5.0, 0.0, 5.0, 8.0]], [[12, 166016], [16, 166016], [8, 699050], [10, 699050], [26, 699050]]], [[[[26, 15.1, 32.0], [15, 16.0, 6.26], [28, 16.0, 1.69], [22, 0.0, 19.36], [19, 10.99, 32.0], [7, 4.17, 0.55], [18, 16.0, 32.0], [14, 9.32, 32.0], [27, 12.53, 16.28]], [0.0, 0.0, 16.0, 32.0]], [[7, 66118], [28, 352125], [15, 390613], [22, 534666], [27, 853121], [14, 965562], [19, 978943], [26, 1047230], [18, 1048575]]], [[[[29, 0.0, 32.0], [10, -0.21, 0.0], [23, -0.32, 0.0], [26, 0.0, 30.2]], [0.0, 0.0, 0.0, 32.0]], [[10, 0], [23, 0], [26, 696360], [29, 699050]]], [[[[5, 0.0, 18.27], [7, 7.94, 15.88], [27, 0.0, 13.08], [22, 0.0, -4.0], [23, 16.0, -4.0], [11, 15.0, 28.0], [17, 16.0, 28.0]], [0.0, -4.0, 16.0, 28.0]], [[22, 0], [23, 349525], [27, 526344], [5, 565376], [7, 622576], [11, 1047210], [17, 1048575]]], [[[[4, 13.33, 13.88], [5, 13.33, 13.88], [23, -10.0, 28.0], [17, -10.0, 28.0], [18, -10.0, -4.0], [19, -10.0, 28.0], [8, 90.0, -4.0], [6, 90.0, -4.0], [25, 83.18, -4.0], [29, 42.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[18, 0], [25, 345412], [6, 349525], [8, 349525], [4, 548596], [5, 548596], [17, 699050], [19, 699050], [23, 699050], [29, 961466]]], [[[[14, 90.0, 28.0], [15, 90.0, 28.0]], [-10.0, -4.0, 90.0, 28.0]], [[14, 1048575], [15, 1048575]]]], [[[[[21, 0.12, 0.0], [19, 7.02, 32.0], [28, 8.31, 21.26], [26, 16.0, 12.31], [8, 0.0, 32.0], [3, 15.19, 32.0], [20, 16.0, 0.0], [4, 0.0, 18.69], [29, 0.0, 24.15], [24, 16.0, 28.82], [11, 2.01, 6.28]], [0.0, 0.0, 16.0, 32.0]], [[21, 21], [11, 57472], [20, 349525], [26, 513495], [4, 533032], [29, 655392], [8, 699050], [19, 785067], [28, 821637], [24, 1038301], [3, 1047290]]], [[[[5, 8.05, -0.06], [8, 19.59, -4.0], [16, 13.1, 14.81]], [5.0, -4.0, 21.0, 28.0]], [[5, 31405], [8, 345105], [16, 795286]]], [[[[9, 21.0, 28.0], [10, 21.0, 28.0], [16, 18.49, 21.34], [22, 5.0, -4.0], [3, 5.7, 4.57], [12, 5.0, 17.62], [7, 5.0, 24.42], [18, 18.67, 28.0], [27, 18.9, -4.0], [26, 21.0, 28.0]], [5.0, -4.0, 21.0, 28.0]], [[22, 0], [3, 132696], [27, 333121], [12, 559626], [7, 688290], [16, 989661], [18, 1031918], [9, 1048575], [10, 1048575], [26, 1048575]]], [[[[25, 10.0, 1.85], [20, 9.05, 4.3], [3, 10.0, 0.0], [12, 4.47, 8.0], [4, 2.3, 0.0], [24, 0.8, 5.16], [16, 6.38, 0.0], [17, 0.85, 5.26], [27, 10.67, 2.18]], [0.0, 0.0, 10.0, 8.0]], [[4, 21573], [16, 278609], [3, 349525], [25, 392693], [27, 481151], [24, 561953], [17, 563479], [12, 785131], [20, 870780]]], [[[[2, 0.0, 4.0], [10, 0.0, 4.0], [28, 100.0, -2.41], [20, 57.46, 1.22], [29, 100.0, -4.0], [12, 0.0, -3.72], [26, 0.0, -0.9], [23, 74.85, 3.5], [6, 65.21, 4.0], [19, 52.24, -2.41]], [0.0, -4.0, 100.0, 4.0]], [[12, 2058], [26, 164000], [19, 303518], [29, 349525], [28, 390623], [2, 699050], [10, 699050], [20, 824048], [6, 977903], [23, 980308]]], [[[[7, 0.0, 8.0], [29, 0.0, 8.0], [13, 5.86, 8.0], [12, 10.0, 6.9], [19, 0.0, 0.0], [24, 5.31, 0.57], [3, 3.24, 0.0], [5, 2.21, 8.0], [21, 5.53, 0.0], [8, 10.1, 0.0]], [0.0, 0.0, 10.0, 8.0]], [[19, 0], [3, 69701], [21, 263444], [24, 270805], [8, 349525], [7, 699050], [29, 699050], [5, 720558], [13, 965610], [12, 1015647]]], [[[[1, 21.0, 0.0], [9, 9.38, 21.29], [15, 5.0, 7.16], [14, 10.11, 10.75], [16, 5.0, 32.0], [29, 16.79, 32.0], [13, 5.0, 0.0], [23, 5.0, 32.0], [11, 21.0, 26.92]], [5.0, 0.0, 21.0, 32.0]], [[13, 0], [15, 43042], [14, 209557], [1, 349525], [9, 625090], [16, 699050], [23, 699050], [29, 982958], [11, 1013751]]], [[[[22, 5.0, 2.81], [6, 14.42, 4.0], [12, 8.46, -4.97], [14, 20.97, -4.0], [13, 5.0, 2.87], [17, 12.87, 4.0]], [5.0, -4.0, 21.0, 4.0]], [[12, 20817], [14, 349524], [22, 665642], [13, 665770], [17, 786367], [6, 965614]]]]]
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 | [[1, 349525], [29, 699050]] | [[1, 349525], [29, 699050]] | Passed |
| case 1 | [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]] | [[1, 0], [8, 0], [21, 0], [12, 164386], [4, 567938]] | Passed |
| case 2 | [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]] | [[8, 0], [24, 69632], [21, 349525], [19, 699050], [6, 1017148]] | Passed |
| case 3 | [[8, 349249], [29, 349249]] | [[8, 349249], [29, 349249]] | Passed |
| case 4 | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | Passed |
| case 5 | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | Passed |
| case 6 | [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]] | [[5, 0], [7, 34976], [4, 339364], [3, 490847], [18, 527008], [22, 782255]] | Passed |
| case 7 | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]] | [[18, 0], [21, 0], [25, 0], [27, 0], [16, 903085], [1, 1031261], [7, 1031871]] | Passed |
SHA-256 / f5879e9e001061750b3717cb858c211487f2b409af621d271e121a3ab82b8f21
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:50:59.925624+00:00.
Case digest / 65a1ab606a55f62c9e8efbb7e4408646fa2144ce5cbf780c911faff1b0201a0e