考虑一个S
长度为string 的二进制字符串n
。从索引中1
,我们可以计算出海明距离之间S[1..i+1]
,并S[n-i..n]
为所有i
从订单0
到n-1
。等长的两个字符串之间的汉明距离是相应符号不同的位置数。例如,
S = 01010
给
[0, 2, 0, 4, 0].
这是因为0
matchs 0
,01
具有汉明距离2到10
,010
matches 010
,0101
具有汉明距离4到1010
最后01010
匹配自己。
但是,我们仅对汉明距离最大为1的输出感兴趣。因此,在此任务中,我们将报告Y
汉明距离是否最多为1,N
否则为否。因此,在上面的示例中,我们将获得
[Y, N, Y, N, Y]
定义f(n)
为Y
s和N
s在2^n
不同S
长度的所有可能位字符串上迭代时得到的不同数组的数目n
。
任务
为了增加n
开头1
,应该输出代码f(n)
。
示例答案
对于n = 1..24
,正确的答案是:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
计分
您的代码应从依次n = 1
给出答案的角度进行迭代n
。我将为整个运行计时,两分钟后将其终止。
您的分数是n
您当时获得的最高分。
如果是平局,则第一个答案将获胜。
我的代码将在哪里进行测试?
我将在cygwin下的我的Windows 7笔记本电脑上运行您的代码。因此,请提供一切可能的帮助,以简化此过程。
我的笔记本电脑具有8GB的RAM和一个带有2核和4线程的Intel i7 5600U@2.6 GHz(Broadwell)CPU。指令集包括SSE4.2,AVX,AVX2,FMA3和TSX。
每种语言的主要条目
- 使用Anders Kaseorg的CryptoMiniSat 在Rust中使用n = 40。(在Vbox下的Lubuntu guest虚拟机中。)
- Christian Seviers撰写的使用BuDDy库在C ++中使用n = 35。(在Vbox下的Lubuntu guest虚拟机中。)
- n = 34,安德斯·卡塞格(Anders Kaseorg)在克林戈(Clingo)。(在Vbox下的Lubuntu guest虚拟机中。)
- N = 31在锈病由Anders Kaseorg。
- NikoNyrh 在Clojure中的n = 29。
- n = 29 in C由手枪演奏。
- n = 27在Haskell由bartavelle
- n = 24(以Pari / gp为单位)。
- 在我的Python 2 + pypy中,n = 22。
- 在Mathematica中,alephalpha的n = 21。(自我报告)
未来赏金
现在,对于两分钟之内在我的计算机上达到n = 80的任何答案,我将给予200点奖励。