#!/usr/bin/env python3 s=[1,0,1,1,0,0,1,1] b=[] for i in range(72): f=s[0]^s[2]^s[3]^s[4] s=s[1:] s.append(f) b.append(s[0]) print('bits',''.join(map(str,b))) rows=[] for i in range(6): v=0 for x in b[12*i:][:12]: v=v*2 x rows.append(v) print('G0',*[format(x,'012b') for x in rows]) rr=0 pv=[] for c in range(12): p=-1 for i in range(rr,6): if rows[i]>>(11-c)&1: p=i break if p<0: continue rows[rr],rows[p]=rows[p],rows[rr] for i in range(6): if i!=rr and rows[i]>>(11-c)&1: rows[i]^=rows[rr] pv.append(c) rr=-~rr print('RREF',*[format(x,'012b') for x in rows]) print('pivots',pv) fr=[c for c in range(12) if c not in pv] print('free',fr) P=[] for r in rows: P.append([r>>(11-c)&1 for c in fr]) print('P',P) H=[] for j in range(6): v=0 for i in range(6): v=v*2+P[i][j] H.append(v) for j in range(6): H.append(1<<(5-j)) print('H',H) N=[[0]*64 for _ in range(4)] for m in range(4096): w=0 y=0 for i in range(12): if m>>i&1: w=-~w y^=H[i] if w<4: N[w][y]=-~N[w][y] print('totals',[sum(x) for x in N]) lc=0 rc=0 L=[] R=[] for y in range(64): l=y==0 or N[1][y]>0 or N[2][y]>0 q=(N[1][y]+2*N[2][y]+3*N[3][y])%5 if l: lc=-~lc L.append(y) if q==2: rc=-~rc R.append(y) print('light',lc,L) print('res',rc,R) print('ANSWER',rc)