S
長さのバイナリ文字列を考えn
ます。インデックス作成1
、我々は計算することができハミング距離の間S[1..i+1]
とS[n-i..n]
すべてのためにi
から順に0
しますn-1
。等しい長さの2つのストリング間のハミング距離は、対応するシンボルが異なる位置の数です。例えば、
S = 01010
与える
[0, 2, 0, 4, 0].
これは0
マッチ0
、01
ハミング距離が2に10
、010
マッチ010
、0101
4にハミング距離があり1010
、最終的に01010
自分自身にマッチします。
ただし、ハミング距離が最大1である出力のみに関心があります。したがって、このタスクではY
、ハミング距離が最大で1であるかどうかを報告し、N
場合そうでないます。したがって、上記の例では次のようになります
[Y, N, Y, N, Y]
すべてを反復するときに取得されるsとsのf(n)
個別の配列の数になるように定義するY
N
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
に順番にがあります。実行全体の時間を計り、2分後に殺します。
あなたのスコアは最高です n
その時間に到達するです。
同点の場合、最初の答えが勝ちです。
コードはどこでテストされますか?
私の(少し古い)Windows 7ラップトップでcygwinの下でコードを実行します。そのため、これを簡単にするためにできる限りの支援をお願いします。
私のラップトップには、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ゲストVMで。)
- Christian SeviersによるBuDDyライブラリを使用したC ++ではn = 35。(VboxのLubuntuゲストVMで。)
- N = 34でClingoはAnders Kaseorgによる。(VboxのLubuntuゲストVMで。)
- N = 31で錆はAnders Kaseorgによる。
- N = 29でClojureの NikoNyrhによる。
- n = 29、バータベルによるC
- N = 27でハスケル bartavelleによって
- alephalphaによるPari / gpでn = 24。
- Python 2 + pypyでn = 22。
- alephalphaによるMathematicaではn = 21。(自己報告)
将来の報奨金
これで、2分間でマシン上で最大n = 80になる回答に対して200ポイントの報奨金を与えます。