python3 -c "import random,time,math R=7 C=11 N=77 W=[] for r in range(R): for c in range(C): W.append([u*C+v for u in range(max(0,r-1),min(R,r+2)) for v in range(max(0,c-1),min(C,c+2))]) WI=[[] for _ in range(N)] for k,w in enumerate(W): for i in w: WI[i].append(k) a=[75,48,49,68,76,46,63,69,52,53,77,50,20,6,35,23,2,42,19,7,21,38,11,40,10,25,16,17,22,28,5,18,39,62,51,57,64,66,58,55,65,54,56,70,37,26,3,14,32,1,12,43,4,15,36,33,30,9,29,31,13,34,27,8,24,41,60,67,44,73,71,45,59,74,47,61,72] t=308 S=[sum(a[i] for i in w) for w in W] be=sum(max(0,x-t) for x in S) best=a[:] bM=max(S) T=100.0 end=time.time()+6.8 it=0 bad=0 while time.time()t] if cand: k=random.choice(cand) i=max(W[k],key=lambda q:a[q]) else: i=random.randrange(N) else: i=random.randrange(N) j=random.randrange(N) if i==j: continue A=list(set(WI[i]+WI[j])) vi=a[i] vj=a[j] d=vi-vj old=0 ns=[0]*N for q in A: old=old+max(0,S[q]-t) z=0 if i in W[q]: z=z+d if j in W[q]: z=z-d ns[q]=S[q]-z new=0 for q in A: new=new+max(0,ns[q]-t) dd=new-old if dd<=0 or random.random()