const setup=require('./route_bench_setup.cjs'); const solverPath=process.argv[2];const N=+process.argv[3]||40;const live=process.argv[4]==='live'; const {S}=setup(solverPath); const L=S.LIM,O=S.ORDER,w=S.wrap180; let s=12345;const rnd=()=>{s=(s*1664525+1013904223)>>>0;return s/4294967296}; const rq=()=>O.map(id=>{const t=L[id];return t.lo+rnd()*(t.hi-t.lo)}); const d=(a,b)=>a.map((v,i)=>L[O[i]].cont?w(b[i]-v):b[i]-v); function segOK(a,b){const dd=d(a,b);const m=Math.max(...dd.map(Math.abs));const n=Math.max(1,Math.ceil(m/1));for(let i=1;i<=n;i++){if(!S.collideFree(a.map((v,k)=>v+dd[k]*i/n)))return false}return true} // build cases: free start, free goal config, straight blocked const cases=[];let tries=0; while(cases.lengthMath.abs(x)/VMAX[k]))+ (pts.length>2&&iL[O[k]].cont?v+w(pts[i][k]-v):pts[i][k]); let ok=true;for(let i=1;ia+Math.abs(x),0); const direct=d(c.from,r.q).reduce((a,x)=>a+Math.abs(x),0); // reversals let rev=0;for(let k=0;k<6;k++){let sg=0;for(let i=1;i