// Isolated feasibility experiment; not wired into production search entry points. // Build: g++ -O3 -std=c++17 -march=native research/upper_interval_probe.cpp -o /tmp/upper_interval_probe // Tests/benchmark: /tmp/upper_interval_probe // mode=0: existing sorted-event solver; mode=1: two running residue intervals. #include "slime_solver_core.hpp" #include #include #include #include #include #include #include namespace sr=slime_research; using Clock=std::chrono::steady_clock; using Cells=std::array; struct Emit { std::vector& v; void operator()(uint64_t s){v.push_back(s);} }; Cells cells(int x,int z){Cells c;for(int j=0;j<5;j++)for(int i=0;i<5;i++)c[j*5+i]={sr::coordinateTerm(x+i,z+j),sr::kSlime};return c;} std::vector roots(const Cells& c){std::vector r;for(uint32_t p=0;p<(1u<<18);p++)if(sr::partialPatternPossible(p,18,c.data(),25))r.push_back(p);return r;} uint64_t visits=0; void fast(uint64_t low,const Cells& c,Emit& emit){ uint32_t q=sr::nextStateFromTerm(low,c[0].term)>>17; ++visits; if(q&1)return; uint32_t b=q>>18,r=q&((1u<<18)-1),t=8192-b; uint32_t residue[2]={(r%5+5-b%5)%5,0};residue[1]=(residue[0]+2)%5; uint32_t lo[2]={0,t},hi[2]={t,8192}; unsigned mask=0; for(int k=0;k<2;k++)if(sr::firstWithResidue(lo[k],residue[k])>17;++visits; if(q&1)return; b=q>>18;r=q&((1u<<18)-1);t=8192-b; uint32_t before=(r%5+5-b%5)%5,after=(before+2)%5; for(int k=0;k<2;k++)if(mask&(1u<=hi[k])mask&=~(1u< baseline; for(int round=0;round<3;round++)for(int mode=0;mode<2;mode++){ std::vector result;Emit e{result};visits=0;auto start=Clock::now(); for(auto p:rr)for(uint64_t m=0;m<(1u<<17);m++){ uint64_t s=p+(m<<18); if(mode)fast(s,c,e);else sr::solveUpper13(s,c.data(),25,e); } double sec=std::chrono::duration(Clock::now()-start).count(); std::sort(result.begin(),result.end()); if(!mode)baseline=result;else if(result!=baseline)throw std::runtime_error("full search mismatch"); std::cout<<"round="<a,b;Emit eb{b};fast(s,c,eb); for(uint64_t h=0;h<8192;h++){ uint64_t seed=s+(h<<35);bool ok=true; for(auto cell:c)if((sr::nextStateFromTerm(seed,cell.term)>>17)%10){ok=false;break;} if(ok&&sr::verifyPattern(seed,c.data(),25))a.push_back(seed); } std::sort(b.begin(),b.end());if(a!=b)throw std::runtime_error("direct enumeration mismatch"); } std::cout<<"direct_upper_cases=128 passed"< counts;uint64_t sum=0;unsigned zero=0; for(int i=0;i<4096;i++){ auto cc=cells(int(rng()%3750000)-1875000,int(rng()%3750000)-1875000); unsigned n=roots(cc).size();counts.push_back(n);sum+=n;zero+=n==0; } std::sort(counts.begin(),counts.end()); std::cout<<"uniform_positions=4096 zero="<