FA-87571 / Collision detection broadphase / Open access
Morton bit spreading shifts by two at the nibble stage · case 01
Coordinate bits collide at the nibble stage and distant objects share codes.
ROOT CAUSE
The second spreading step uses v << 2 with the 0x0F0F0F0F mask.
VERIFIED REPAIR
The nibble stage must shift by four before masking with 0x0F0F0F0F.
Unsuccessful approach: Using the final 0x55555555 mask at that stage discards bits early.
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 << 2)) & 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 = [[[[[[5, 55.38, -0.83], [8, 0.0, 4.0], [17, 0.0, 4.0], [21, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[5, 427831], [8, 699050], [17, 699050], [21, 699050]]], [[[[21, 6.0, -0.03], [8, -2.52, 28.0], [12, 0.34, -1.72], [16, -10.48, 8.44]], [-10.0, -4.0, 6.0, 28.0]], [[16, 164008], [12, 287121], [21, 360447], [8, 785406]]], [[[[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]]], [[[[23, 11.15, 0.0], [29, 11.15, 0.0], [13, 45.93, 3.76], [24, 99.01, 0.0]], [0.0, 0.0, 100.0, 32.0]], [[23, 5380], [29, 5380], [13, 97172], [24, 349457]]], [[[[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]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[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]]], [[[[4, -10.0, 8.0], [9, -10.0, 0.0], [7, -10.0, 8.0], [26, -10.0, 8.0], [5, -10.0, 0.0], [16, -10.0, 0.0], [10, -10.0, 0.0]], [-10.0, 0.0, -10.0, 8.0]], [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]]]], [[[[[4, 0.0, 32.0], [1, 0.0, 32.0], [28, 0.99, 11.38], [5, 0.17, 32.0], [17, 0.0, 6.99], [3, -0.88, 0.86], [15, 0.25, 10.52]], [0.0, 0.0, 0.0, 32.0]], [[3, 650], [17, 41642], [15, 139776], [28, 141472], [1, 699050], [4, 699050], [5, 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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[1, -10.0, -4.0], [11, 1.86, 4.18], [2, 90.0, -2.58], [14, 28.94, -1.12], [22, 83.12, -4.0], [9, -10.0, -0.74], [20, 84.87, 4.19], [17, 90.0, -1.84]], [-10.0, -4.0, 90.0, 4.0]], [[1, 0], [9, 165890], [14, 223828], [22, 345409], [2, 384887], [17, 481141], [11, 704491], [20, 1047279]]], [[[[5, 5.0, 21.99], [15, 5.0, 13.66], [18, 15.39, 23.97], [23, 10.69, 18.79], [7, 20.74, 28.0], [10, 5.0, 28.0], [8, 5.0, -4.0], [27, 5.0, -4.0]], [5.0, -4.0, 21.0, 28.0]], [[8, 0], [27, 0], [15, 526882], [23, 636626], [5, 658090], [10, 699050], [18, 945130], [7, 1048319]]], [[[[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]]], [[[[7, 2.09, 26.27], [12, 0.0, 29.03], [3, 13.02, 11.98], [10, 0.0, 21.46]], [0.0, 0.0, 16.0, 32.0]], [[3, 473771], [10, 559272], [7, 680081], [12, 690176]]], [[[[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]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[27, -10.0, 3.58], [23, -10.0, 13.28], [8, -10.0, 15.34], [1, -10.0, 10.68], [7, -10.0, 4.81], [18, -10.0, 9.46]], [-10.0, 0.0, -10.0, 32.0]], [[27, 10760], [7, 33410], [18, 133288], [1, 139810], [23, 166016], [8, 174216]]], [[[[18, -10.96, -4.0], [4, -10.96, -4.0], [20, -9.55, 4.0], [28, -10.0, -2.22], [21, -10.0, -3.26]], [-10.0, -4.0, -10.0, 4.0]], [[4, 0], [18, 0], [21, 8872], [28, 43018], [20, 699050]]], [[[[1, 77.76, 24.57], [14, 5.0, 0.0]], [5.0, 0.0, 105.0, 32.0]], [[14, 0], [1, 939593]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[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]]], [[[[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, 10.93, 6.74], [14, 8.29, 8.0], [21, 11.99, 0.0], [25, 9.07, 0.0], [9, 10.31, 8.0], [12, 5.81, 8.0]], [5.0, 0.0, 15.0, 8.0]], [[25, 82944], [21, 282693], [12, 703406], [14, 768938], [7, 930813], [9, 961535]]]], [[[[[24, 21.0, 9.67], [6, 21.0, 9.67]], [5.0, -4.0, 21.0, 28.0]], [[6, 515959], [24, 515959]]], [[[[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]]], [[[[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]]], [[[[8, 90.0, 8.0], [23, 42.69, 0.0]], [-10.0, 0.0, 90.0, 8.0]], [[23, 262469], [8, 1048575]]], [[[[20, 5.0, 15.36], [9, 5.0, 15.36], [6, 5.0, -4.0], [8, 5.0, 7.29], [2, 5.0, -4.0], [14, 5.0, 24.78], [17, 5.0, 2.43], [7, 5.69, -4.0]], [5.0, -4.0, 5.0, 28.0]], [[2, 0], [6, 0], [7, 0], [17, 41122], [8, 141442], [9, 534666], [20, 534666], [14, 688768]]], [[[[6, 5.0, 28.0], [19, 5.0, -4.0], [10, 4.81, -4.0], [1, 5.97, -4.0], [7, 5.0, 20.22], [16, 5.0, 11.44], [8, 5.0, -4.0], [4, 5.24, 16.7], [21, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[1, 0], [8, 0], [10, 0], [19, 0], [16, 174248], [4, 557608], [7, 655402], [6, 699050], [21, 699050]]], [[[[22, -5.18, 8.0], [25, -5.18, 8.0]], [-10.0, 0.0, 6.0, 8.0]], [[22, 765882], [25, 765882]]], [[[[10, 3.1, 28.0], [9, 3.1, 28.0], [12, 6.8, -4.0], [27, 10.0, -4.0]], [0.0, -4.0, 10.0, 28.0]], [[12, 279872], [27, 349525], [9, 765947], [10, 765947]]]], [[[[[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]]], [[[[13, 0.0, 14.5], [5, 5.99, 28.0], [29, 0.0, 19.26]], [0.0, -4.0, 16.0, 28.0]], [[13, 532992], [29, 567424], [5, 770047]]], [[[[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]]], [[[[12, 0.0, 28.0], [13, 0.0, 28.0], [27, 68.38, -4.0], [6, 52.05, 20.98], [22, 82.17, -3.87], [15, 100.0, 4.93], [2, 100.0, 20.98], [17, 18.68, 23.92], [9, 100.0, 28.0], [29, 100.0, -4.0]], [0.0, -4.0, 100.0, 28.0]], [[27, 279888], [22, 331873], [29, 349525], [15, 481271], [17, 684023], [12, 699050], [13, 699050], [6, 918458], [2, 1005567], [9, 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]]], [[[[27, 0.68, -4.0], [3, 0.68, -4.0], [15, 6.0, 2.82], [8, -10.0, 3.95], [26, -4.7, 4.0], [24, 6.0, 4.0]], [-10.0, -4.0, 6.0, 4.0]], [[3, 279621], [27, 279621], [8, 699010], [26, 768943], [15, 1015253], [24, 1048575]]], [[[[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]]]]]
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 | [[5, 6686839], [8, 11143850], [17, 11143850], [21, 11143850]] | [[5, 427831], [8, 699050], [17, 699050], [21, 699050]] | Failed |
| case 1 | [[16, 2230440], [12, 4458129], [21, 5572607], [8, 12259326]] | [[16, 164008], [12, 287121], [21, 360447], [8, 785406]] | Failed |
| case 2 | [[10, 0], [26, 0], [23, 2560], [24, 11141800], [19, 11143296], [6, 11143850], [12, 11143850]] | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | Failed |
| case 3 | [[23, 324], [29, 324], [13, 1116116], [24, 5571857]] | [[23, 5380], [29, 5380], [13, 97172], [24, 349457]] | Failed |
| case 4 | [[29, 2722], [13, 1115204], [20, 1115409], [25, 1115409], [16, 2230442], [12, 5571925]] | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | Failed |
| case 5 | [[8, 5571921], [29, 5571921]] | [[8, 349249], [29, 349249]] | Failed |
| case 6 | [[2, 2696], [22, 5571925], [11, 10030515], [29, 15600243], [4, 16715775]] | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | Failed |
| case 7 | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 11143850], [7, 11143850], [26, 11143850]] | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]] | Failed |
SHA-256 / 5cfb1b3d3cb165408f12b3fc61c6c0cff93312c570ac154f7d6bb506a4f1ff8e
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)) & 0x55555555
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 = [[[[[[5, 55.38, -0.83], [8, 0.0, 4.0], [17, 0.0, 4.0], [21, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[5, 427831], [8, 699050], [17, 699050], [21, 699050]]], [[[[21, 6.0, -0.03], [8, -2.52, 28.0], [12, 0.34, -1.72], [16, -10.48, 8.44]], [-10.0, -4.0, 6.0, 28.0]], [[16, 164008], [12, 287121], [21, 360447], [8, 785406]]], [[[[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]]], [[[[23, 11.15, 0.0], [29, 11.15, 0.0], [13, 45.93, 3.76], [24, 99.01, 0.0]], [0.0, 0.0, 100.0, 32.0]], [[23, 5380], [29, 5380], [13, 97172], [24, 349457]]], [[[[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]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[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]]], [[[[4, -10.0, 8.0], [9, -10.0, 0.0], [7, -10.0, 8.0], [26, -10.0, 8.0], [5, -10.0, 0.0], [16, -10.0, 0.0], [10, -10.0, 0.0]], [-10.0, 0.0, -10.0, 8.0]], [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]]]], [[[[[4, 0.0, 32.0], [1, 0.0, 32.0], [28, 0.99, 11.38], [5, 0.17, 32.0], [17, 0.0, 6.99], [3, -0.88, 0.86], [15, 0.25, 10.52]], [0.0, 0.0, 0.0, 32.0]], [[3, 650], [17, 41642], [15, 139776], [28, 141472], [1, 699050], [4, 699050], [5, 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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[1, -10.0, -4.0], [11, 1.86, 4.18], [2, 90.0, -2.58], [14, 28.94, -1.12], [22, 83.12, -4.0], [9, -10.0, -0.74], [20, 84.87, 4.19], [17, 90.0, -1.84]], [-10.0, -4.0, 90.0, 4.0]], [[1, 0], [9, 165890], [14, 223828], [22, 345409], [2, 384887], [17, 481141], [11, 704491], [20, 1047279]]], [[[[5, 5.0, 21.99], [15, 5.0, 13.66], [18, 15.39, 23.97], [23, 10.69, 18.79], [7, 20.74, 28.0], [10, 5.0, 28.0], [8, 5.0, -4.0], [27, 5.0, -4.0]], [5.0, -4.0, 21.0, 28.0]], [[8, 0], [27, 0], [15, 526882], [23, 636626], [5, 658090], [10, 699050], [18, 945130], [7, 1048319]]], [[[[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]]], [[[[7, 2.09, 26.27], [12, 0.0, 29.03], [3, 13.02, 11.98], [10, 0.0, 21.46]], [0.0, 0.0, 16.0, 32.0]], [[3, 473771], [10, 559272], [7, 680081], [12, 690176]]], [[[[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]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[27, -10.0, 3.58], [23, -10.0, 13.28], [8, -10.0, 15.34], [1, -10.0, 10.68], [7, -10.0, 4.81], [18, -10.0, 9.46]], [-10.0, 0.0, -10.0, 32.0]], [[27, 10760], [7, 33410], [18, 133288], [1, 139810], [23, 166016], [8, 174216]]], [[[[18, -10.96, -4.0], [4, -10.96, -4.0], [20, -9.55, 4.0], [28, -10.0, -2.22], [21, -10.0, -3.26]], [-10.0, -4.0, -10.0, 4.0]], [[4, 0], [18, 0], [21, 8872], [28, 43018], [20, 699050]]], [[[[1, 77.76, 24.57], [14, 5.0, 0.0]], [5.0, 0.0, 105.0, 32.0]], [[14, 0], [1, 939593]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[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]]], [[[[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, 10.93, 6.74], [14, 8.29, 8.0], [21, 11.99, 0.0], [25, 9.07, 0.0], [9, 10.31, 8.0], [12, 5.81, 8.0]], [5.0, 0.0, 15.0, 8.0]], [[25, 82944], [21, 282693], [12, 703406], [14, 768938], [7, 930813], [9, 961535]]]], [[[[[24, 21.0, 9.67], [6, 21.0, 9.67]], [5.0, -4.0, 21.0, 28.0]], [[6, 515959], [24, 515959]]], [[[[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]]], [[[[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]]], [[[[8, 90.0, 8.0], [23, 42.69, 0.0]], [-10.0, 0.0, 90.0, 8.0]], [[23, 262469], [8, 1048575]]], [[[[20, 5.0, 15.36], [9, 5.0, 15.36], [6, 5.0, -4.0], [8, 5.0, 7.29], [2, 5.0, -4.0], [14, 5.0, 24.78], [17, 5.0, 2.43], [7, 5.69, -4.0]], [5.0, -4.0, 5.0, 28.0]], [[2, 0], [6, 0], [7, 0], [17, 41122], [8, 141442], [9, 534666], [20, 534666], [14, 688768]]], [[[[6, 5.0, 28.0], [19, 5.0, -4.0], [10, 4.81, -4.0], [1, 5.97, -4.0], [7, 5.0, 20.22], [16, 5.0, 11.44], [8, 5.0, -4.0], [4, 5.24, 16.7], [21, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[1, 0], [8, 0], [10, 0], [19, 0], [16, 174248], [4, 557608], [7, 655402], [6, 699050], [21, 699050]]], [[[[22, -5.18, 8.0], [25, -5.18, 8.0]], [-10.0, 0.0, 6.0, 8.0]], [[22, 765882], [25, 765882]]], [[[[10, 3.1, 28.0], [9, 3.1, 28.0], [12, 6.8, -4.0], [27, 10.0, -4.0]], [0.0, -4.0, 10.0, 28.0]], [[12, 279872], [27, 349525], [9, 765947], [10, 765947]]]], [[[[[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]]], [[[[13, 0.0, 14.5], [5, 5.99, 28.0], [29, 0.0, 19.26]], [0.0, -4.0, 16.0, 28.0]], [[13, 532992], [29, 567424], [5, 770047]]], [[[[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]]], [[[[12, 0.0, 28.0], [13, 0.0, 28.0], [27, 68.38, -4.0], [6, 52.05, 20.98], [22, 82.17, -3.87], [15, 100.0, 4.93], [2, 100.0, 20.98], [17, 18.68, 23.92], [9, 100.0, 28.0], [29, 100.0, -4.0]], [0.0, -4.0, 100.0, 28.0]], [[27, 279888], [22, 331873], [29, 349525], [15, 481271], [17, 684023], [12, 699050], [13, 699050], [6, 918458], [2, 1005567], [9, 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]]], [[[[27, 0.68, -4.0], [3, 0.68, -4.0], [15, 6.0, 2.82], [8, -10.0, 3.95], [26, -4.7, 4.0], [24, 6.0, 4.0]], [-10.0, -4.0, 6.0, 4.0]], [[3, 279621], [27, 279621], [8, 699010], [26, 768943], [15, 1015253], [24, 1048575]]], [[[[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]]]]]
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 | [[5, 659263], [8, 666154], [17, 666154], [21, 666154]] | [[5, 427831], [8, 699050], [17, 699050], [21, 699050]] | Failed |
| case 1 | [[12, 11541], [21, 343871], [16, 655400], [8, 999230]] | [[16, 164008], [12, 287121], [21, 360447], [8, 785406]] | Failed |
| case 2 | [[10, 0], [26, 0], [23, 10240], [19, 655360], [24, 665640], [6, 666154], [12, 666154]] | [[10, 0], [26, 0], [23, 40960], [24, 665640], [19, 688256], [6, 699050], [12, 699050]] | Failed |
| case 3 | [[23, 5376], [29, 5376], [24, 333077], [13, 343828]] | [[23, 5380], [29, 5380], [13, 97172], [24, 349457]] | Failed |
| case 4 | [[29, 10762], [13, 328960], [20, 332821], [25, 332821], [12, 333077], [16, 657962]] | [[29, 41602], [13, 83268], [20, 86033], [25, 86033], [16, 164394], [12, 349525]] | Failed |
| case 5 | [[8, 332805], [29, 332805]] | [[8, 349249], [29, 349249]] | Failed |
| case 6 | [[2, 10240], [22, 333077], [11, 335407], [29, 666159], [4, 999231]] | [[2, 43144], [22, 349525], [11, 643747], [29, 959075], [4, 1048575]] | Failed |
| case 7 | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 666154], [7, 666154], [26, 666154]] | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]] | Failed |
SHA-256 / fd687582c915d22729aaaddafe8b210e618c60e9d0f31ec9a079090d7d1d8030
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 = [[[[[[5, 55.38, -0.83], [8, 0.0, 4.0], [17, 0.0, 4.0], [21, 0.0, 4.0]], [0.0, -4.0, 100.0, 4.0]], [[5, 427831], [8, 699050], [17, 699050], [21, 699050]]], [[[[21, 6.0, -0.03], [8, -2.52, 28.0], [12, 0.34, -1.72], [16, -10.48, 8.44]], [-10.0, -4.0, 6.0, 28.0]], [[16, 164008], [12, 287121], [21, 360447], [8, 785406]]], [[[[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]]], [[[[23, 11.15, 0.0], [29, 11.15, 0.0], [13, 45.93, 3.76], [24, 99.01, 0.0]], [0.0, 0.0, 100.0, 32.0]], [[23, 5380], [29, 5380], [13, 97172], [24, 349457]]], [[[[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]]], [[[[8, 97.82, 0.0], [29, 97.82, 0.0]], [0.0, 0.0, 100.0, 8.0]], [[8, 349249], [29, 349249]]], [[[[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]]], [[[[4, -10.0, 8.0], [9, -10.0, 0.0], [7, -10.0, 8.0], [26, -10.0, 8.0], [5, -10.0, 0.0], [16, -10.0, 0.0], [10, -10.0, 0.0]], [-10.0, 0.0, -10.0, 8.0]], [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]]]], [[[[[4, 0.0, 32.0], [1, 0.0, 32.0], [28, 0.99, 11.38], [5, 0.17, 32.0], [17, 0.0, 6.99], [3, -0.88, 0.86], [15, 0.25, 10.52]], [0.0, 0.0, 0.0, 32.0]], [[3, 650], [17, 41642], [15, 139776], [28, 141472], [1, 699050], [4, 699050], [5, 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]]], [[[[24, 97.03, -4.0], [11, 26.52, -4.0]], [0.0, -4.0, 100.0, 4.0]], [[11, 65621], [24, 349185]]], [[[[1, -10.0, -4.0], [11, 1.86, 4.18], [2, 90.0, -2.58], [14, 28.94, -1.12], [22, 83.12, -4.0], [9, -10.0, -0.74], [20, 84.87, 4.19], [17, 90.0, -1.84]], [-10.0, -4.0, 90.0, 4.0]], [[1, 0], [9, 165890], [14, 223828], [22, 345409], [2, 384887], [17, 481141], [11, 704491], [20, 1047279]]], [[[[5, 5.0, 21.99], [15, 5.0, 13.66], [18, 15.39, 23.97], [23, 10.69, 18.79], [7, 20.74, 28.0], [10, 5.0, 28.0], [8, 5.0, -4.0], [27, 5.0, -4.0]], [5.0, -4.0, 21.0, 28.0]], [[8, 0], [27, 0], [15, 526882], [23, 636626], [5, 658090], [10, 699050], [18, 945130], [7, 1048319]]], [[[[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]]], [[[[7, 2.09, 26.27], [12, 0.0, 29.03], [3, 13.02, 11.98], [10, 0.0, 21.46]], [0.0, 0.0, 16.0, 32.0]], [[3, 473771], [10, 559272], [7, 680081], [12, 690176]]], [[[[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]]]], [[[[[28, 0.0, -4.0], [22, 0.0, -4.0]], [0.0, -4.0, 0.0, 4.0]], [[22, 0], [28, 0]]], [[[[27, -10.0, 3.58], [23, -10.0, 13.28], [8, -10.0, 15.34], [1, -10.0, 10.68], [7, -10.0, 4.81], [18, -10.0, 9.46]], [-10.0, 0.0, -10.0, 32.0]], [[27, 10760], [7, 33410], [18, 133288], [1, 139810], [23, 166016], [8, 174216]]], [[[[18, -10.96, -4.0], [4, -10.96, -4.0], [20, -9.55, 4.0], [28, -10.0, -2.22], [21, -10.0, -3.26]], [-10.0, -4.0, -10.0, 4.0]], [[4, 0], [18, 0], [21, 8872], [28, 43018], [20, 699050]]], [[[[1, 77.76, 24.57], [14, 5.0, 0.0]], [5.0, 0.0, 105.0, 32.0]], [[14, 0], [1, 939593]]], [[[[27, -10.0, 7.72], [4, -10.0, 1.55]], [-10.0, 0.0, -10.0, 8.0]], [[4, 41000], [27, 696992]]], [[[[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]]], [[[[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, 10.93, 6.74], [14, 8.29, 8.0], [21, 11.99, 0.0], [25, 9.07, 0.0], [9, 10.31, 8.0], [12, 5.81, 8.0]], [5.0, 0.0, 15.0, 8.0]], [[25, 82944], [21, 282693], [12, 703406], [14, 768938], [7, 930813], [9, 961535]]]], [[[[[24, 21.0, 9.67], [6, 21.0, 9.67]], [5.0, -4.0, 21.0, 28.0]], [[6, 515959], [24, 515959]]], [[[[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]]], [[[[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]]], [[[[8, 90.0, 8.0], [23, 42.69, 0.0]], [-10.0, 0.0, 90.0, 8.0]], [[23, 262469], [8, 1048575]]], [[[[20, 5.0, 15.36], [9, 5.0, 15.36], [6, 5.0, -4.0], [8, 5.0, 7.29], [2, 5.0, -4.0], [14, 5.0, 24.78], [17, 5.0, 2.43], [7, 5.69, -4.0]], [5.0, -4.0, 5.0, 28.0]], [[2, 0], [6, 0], [7, 0], [17, 41122], [8, 141442], [9, 534666], [20, 534666], [14, 688768]]], [[[[6, 5.0, 28.0], [19, 5.0, -4.0], [10, 4.81, -4.0], [1, 5.97, -4.0], [7, 5.0, 20.22], [16, 5.0, 11.44], [8, 5.0, -4.0], [4, 5.24, 16.7], [21, 5.0, 28.0]], [5.0, -4.0, 5.0, 28.0]], [[1, 0], [8, 0], [10, 0], [19, 0], [16, 174248], [4, 557608], [7, 655402], [6, 699050], [21, 699050]]], [[[[22, -5.18, 8.0], [25, -5.18, 8.0]], [-10.0, 0.0, 6.0, 8.0]], [[22, 765882], [25, 765882]]], [[[[10, 3.1, 28.0], [9, 3.1, 28.0], [12, 6.8, -4.0], [27, 10.0, -4.0]], [0.0, -4.0, 10.0, 28.0]], [[12, 279872], [27, 349525], [9, 765947], [10, 765947]]]], [[[[[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]]], [[[[13, 0.0, 14.5], [5, 5.99, 28.0], [29, 0.0, 19.26]], [0.0, -4.0, 16.0, 28.0]], [[13, 532992], [29, 567424], [5, 770047]]], [[[[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]]], [[[[12, 0.0, 28.0], [13, 0.0, 28.0], [27, 68.38, -4.0], [6, 52.05, 20.98], [22, 82.17, -3.87], [15, 100.0, 4.93], [2, 100.0, 20.98], [17, 18.68, 23.92], [9, 100.0, 28.0], [29, 100.0, -4.0]], [0.0, -4.0, 100.0, 28.0]], [[27, 279888], [22, 331873], [29, 349525], [15, 481271], [17, 684023], [12, 699050], [13, 699050], [6, 918458], [2, 1005567], [9, 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]]], [[[[27, 0.68, -4.0], [3, 0.68, -4.0], [15, 6.0, 2.82], [8, -10.0, 3.95], [26, -4.7, 4.0], [24, 6.0, 4.0]], [-10.0, -4.0, 6.0, 4.0]], [[3, 279621], [27, 279621], [8, 699010], [26, 768943], [15, 1015253], [24, 1048575]]], [[[[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]]]]]
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 | [[5, 427831], [8, 699050], [17, 699050], [21, 699050]] | [[5, 427831], [8, 699050], [17, 699050], [21, 699050]] | Passed |
| case 1 | [[16, 164008], [12, 287121], [21, 360447], [8, 785406]] | [[16, 164008], [12, 287121], [21, 360447], [8, 785406]] | Passed |
| case 2 | [[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 3 | [[23, 5380], [29, 5380], [13, 97172], [24, 349457]] | [[23, 5380], [29, 5380], [13, 97172], [24, 349457]] | 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 | [[8, 349249], [29, 349249]] | [[8, 349249], [29, 349249]] | 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 | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]] | [[5, 0], [9, 0], [10, 0], [16, 0], [4, 699050], [7, 699050], [26, 699050]] | Passed |
SHA-256 / 13fcaa1b39331e3ac8ad4934537611b0a6b538b8356cd941a3bfc5e487bef9be
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.928558+00:00.
Case digest / 5a6a8c57b2c5d8f1517d122fb40a1a14032f2defc514aa84769e55f173d975f7