用户:Peter Luschny/PerfectRulers
目录
完美和最佳的规则
介绍
简而言之的标尺
完成 ,如果1≤d≤L的所有距离d都可以用直尺测量。 很 完美 如果没有长度相同、标记较少的完整尺子。 最优的 如果没有长度更大、标记数量相同的完美尺子。
SAGE工作表
标尺
定义部分总和(T): return[add([T[j]for j in range(i)])for i in(0..len(T))]
部分金额([1,2,3,4,5])
[0, 1, 3, 6, 10, 15]
定义标尺(L,S): 返回图(Partsum,成分(L,长度=S))
标尺(6,3)
[[0, 4, 5, 6],[0, 3, 5, 6],[0, 3, 4, 6],[0, 2, 5, 6],[0, 2, 4, 6], [0, 2, 3, 6],[0, 1, 5, 6],[0, 1, 4, 6],[0, 1, 3, 6],[0, 1, 2, 6]]
完成标尺
定义完成(R): S=设置([]) L=长度(R)-1 对于范围(L,0,-1)中的i: 对于(1..i)中的j: S=S.union(集合([R[i]-R[i-j]]) 返回长度(S)==R[L]
定义CompleteRuler(L,S): 返回筛选器(isComplete,Ruler(L,S))
列表(CompleteRuler(6,3))
[[0, 2, 5, 6], [0, 1, 4, 6]]
对于(0..5)中的i: 对于CompleteRuler(5,i)中的c:打印c
[0, 3, 4, 5] [0, 2, 4, 5] [0, 1, 3, 5] [0, 1, 2, 5] [0, 2, 3, 4, 5] [0, 1, 3, 4, 5] [0, 1, 2, 4, 5] [0, 1, 2, 3, 5] [0, 1, 2, 3, 4, 5]
定义CompleteRules(L): 返回和([CompleteRuler(L,i)for i in(0..L)],[])
完整规则(5)
[[0, 3, 4, 5], [0, 2, 4, 5], [0, 1, 3, 5], [0, 1, 2, 5], [0, 2, 3, 4, 5], [0, 1, 3, 4, 5], [0, 1, 2, 4, 5], [0, 1, 2, 3, 5], [0, 1, 2, 3, 4, 5]]
对于(0..11)中的n: [len(CompleteRuler(n,k))for k in(0..n)]
[1] [0, 1] [0, 0, 1] [0, 0, 2, 1] [0, 0, 0, 3, 1] [0, 0, 0, 4, 4, 1] [0, 0, 0, 2, 9, 5, 1] [0, 0, 0, 0, 12, 14, 6, 1] [0, 0, 0, 0, 8, 27, 20, 7, 1] [0, 0, 0, 0, 4, 40, 48, 27, 8, 1] [0, 0, 0, 0, 0, 38, 90, 75, 35, 9, 1] [0, 0, 0, 0, 0, 30, 134, 166, 110, 44, 10, 1]
完美的标尺
def PerfectRulers(L): 对于(0..L)中的i: R=完整标尺(L,i) 如果len(R)>0:返回R 返回[]
完美标尺(5)
[[0, 3, 4, 5], [0, 2, 4, 5], [0, 1, 3, 5], [0, 1, 2, 5]]
对于(0..6)中的i: [PerfectRulers(i)中的c代表c]
[[0]] [[0, 1]] [[0, 1, 2]] [[0, 2, 3], [0, 1, 3]] [[0, 2, 3, 4], [0, 1, 3, 4], [0, 1, 2, 4]] [[0, 3, 4, 5], [0, 2, 4, 5], [0, 1, 3, 5], [0, 1, 2, 5]] [[0, 2, 5, 6], [0, 1, 4, 6]]
len(完美标尺(10))
38
len(CompleteRulers(10))
248
统治者的代表
定义Ruler_AsRuler(R): l=0 S=“” 对于范围(0,len(R))中的i: 而l<R[i]-i: S=S+‘-’; l=l+1 S=S+'|'; 返回S
标尺_作为标尺([0,1,4,10,16,18,21,23])
'||--|-----|-----|-|--|-|'
定义Ruler_AsBinaryString(R): l=0 S=“” 对于范围(0,len(R))中的i: 而l<R[i]-i: S=S+'0'; l=l+1 S=S+'1'; 返回S
对于PerfectRulers(5)中的c:打印Ruler_AsBinaryString(c)
100111 101011 110101 111001
Ruler_AsBinaryString([0,2,5,6])
'1010011'
箱子(83)
“0b1010011”
定义标尺_积分(R): return int(Ruler_AsBinaryString(R),2)
标尺_整数([0,2,5,6])
83
定义差异代表(R): L=[] 对于(1..len(R)-1)中的i: L追加(R[i]-R[i-1]) 返回L
DiffRep([0,4,5,9])
[4, 1, 4]
部分总和([4,1,4])
[0, 4, 5, 9]
定义成分(R): 返回DiffRep(R)
排序标尺
对于(0..5)中的i: 排序([CompleteRulers(i)中c的Ruler_AsIntegrer(c)])
[1] [3] [7] [11, 13, 15] [23, 27, 29, 31] [39, 43, 47, 53, 55, 57, 59, 61, 63]
对于(0..7)中的i: 排序([Ruler_AsInteger(c)for c in PerfectRulers(i)])
[1] [3] [7] [11, 13] [23, 27, 29] [39, 43, 53, 57] [83, 101] [143, 151, 167, 171, 179, 203, 205, 211, 213, 229, 233, 241]
SPR=排序后的(总和([Ruler_AsIntegrer(c)for c in PerfectRulers(i)] (0..7),[])中的i) SPR公司
[1, 3, 7, 11, 13, 23, 27, 29, 39, 43, 53, 57, 83, 101, 143, 151, 167, 171, 179, 203, 205, 211, 213, 229, 233, 241]
对于SPR中的c:打印箱(c).lstrip(“0b”)
1 11 111 1011 1101 10111 11011 11101 100111 101011 110101 111001 1010011 1100101
def Hamming距离(s,t): 断言长度==长度(t) 返回和(a!=a的b,zip(s,t)中的b)
T=已排序([Ruler_AsIntegrer(c)for c in PerfectRulers(12)]) b=“0000000000000” L=[] 对于T中的c: a=箱子(c).lstrip(“0b”) L.append(汉明距离(a,b)) b=a L(左)
[6, 4, 6, 2, 2, 6, 4, 6, 6, 2, 6, 2, 6, 4]
最佳标尺
OptimalRulers=[ [0], [0, 1], [0, 1, 3], [0, 1, 4, 6], [0, 1, 4, 7, 9], [0, 1, 2, 6, 9], [0, 1, 6, 9, 11, 13], [0, 1, 4, 5, 11, 13], [0, 1, 2, 6, 10, 13], [0, 1, 8, 11, 13, 15, 17], [0, 1, 4, 10, 12, 15, 17], [0, 1, 2, 8, 12, 15, 17], [0, 1, 2, 8, 12, 14, 17], [0, 1, 2, 6, 10, 14, 17], [0, 1, 2, 3, 8, 13, 17], [0, 1, 4, 10, 16, 18, 21, 23], [0, 1, 2, 11, 15, 18, 21, 23], [0, 1, 4, 10, 16, 22, 24, 27, 29], [0, 1, 3, 6, 13, 20, 24, 28, 29], [0, 1, 2, 14, 18, 21, 24, 27, 29], [0, 1, 3, 6, 13, 20, 27, 31, 35, 36], [0, 1, 3, 6, 13, 20, 27, 34, 38, 42, 43], [0, 1, 3, 6, 13, 20, 27, 34, 41, 45, 49, 50], [0, 1, 2, 3, 23, 28, 32, 36, 40, 44, 47, 50], [0, 1, 5, 8, 12, 21, 30, 39, 48, 53, 54, 56, 58], [0, 1, 3, 6, 17, 24, 27, 38, 45, 49, 53, 57, 58], [0, 1, 3, 6, 17, 20, 27, 35, 45, 49, 53, 57, 58], [0, 1, 2, 8, 15, 16, 26, 36, 46, 49, 53, 55, 58], [0, 1, 2, 6, 8, 17, 26, 35, 44, 47, 54, 57, 58], [0, 1, 2, 3, 27, 32, 36, 40, 44, 48, 52, 55, 58], [0, 1, 2, 8, 15, 16, 26, 36, 46, 56, 59, 63, 65, 68], [0, 1, 2, 5, 10, 15, 26, 37, 48, 54, 60, 66, 67, 68], [0, 1, 2, 5, 10, 15, 26, 37, 48, 59, 65, 71, 77, 78, 79], [0, 1, 2, 5, 10, 15, 26, 37, 48, 59, 70, 76, 82, 88, 89, 90], [0, 1, 2, 5, 10, 15, 26, 37, 48, 59, 70, 81, 87, 93, 99, 100, 101] ]
OR=[[0,0],[1,1],[3,2],[6,3],[9,4],[13,5],[17,6],[23,7], [29,8],[36,9]] 定义OptimalRulers(S): 断言((0..9)中的S) return CompleteRuler(OR[S][0],OR[S][1])
对于(0..6)中的i: 对于OptimalRulers(i)中的c:打印Ruler_AsBinaryString(c)
1 11 1011 1101 1010011 1100101 1001000111 1010010011 1100100101 1110001001 10010001000111 10100000110011 10101001000011 11000010010101 11001100000101 11100010001001 100010000100001111 100100010001000111 100101000100000111 101001000100000111 101001010000010011 101010100100000011 110000001001010101 110010000010100101 111000001000100101 111000001000101001 111000100010001001 111100001000010001
威克曼统治者
R=[0、1、2、8、15、16、26、36、46、56、59、63、65、68] 成分(R)
[1, 1, 6, 7, 1, 10, 10, 10, 10, 3, 4, 2, 3]
S=[0、1、2、5、10、15、26、37、48、54、60、66、67、68] 成分(S)
[1, 1, 3, 5, 5, 11, 11, 11, 6, 6, 6, 1, 1]
类型(R)=[1*2,6*1,7*1,1*1,10*4,3*1,4*1,2*1,3*1]
类型(S)=[1*2,3*1,5*2,11*3,6*3,1*2]
W(r,s)=[1*r,r+1,(2r+1)*r,(4r+3)*s,(2r+2)*(r+1),1*r]
def展平(I): “”“与标尺无关的实用程序”“” L=[] 对于i中的i: 如果hasattr(i,“iter_”): L.extend(展平(i)) 其他: L.附录(i) 返回L 定义Wichmann(r,s): C=[[1]*r,r+1,[2*r+1]*r,[4*r+3]*s,[2*r+2]*(r+1),[1]*r] return Partsum(展平(C))
威克曼(2,3)
[0, 1, 2, 5, 10, 15, 26, 37, 48, 54, 60, 66, 67, 68]
标尺_作为二进制字符串(Wichmann(2,3))
'111001000010000100000000001000000000010000000000100000100000100000111'
最优标尺猜想
打印Wichmann(2,8) 打印Wichmann(3,4)
[0,1,2,5,10,15,26,37,48,59,70,81,92,103,109,115,121,122,123] [0,1,2,3, 7,14,21,28,43,58,73,88,96,104,112,120,121,122,123]
计数标尺
扩展此表! 快速生成完美的标尺! (Dis-)证明了最优标尺猜想。