タスクは、OEIS A005434をできるだけ迅速に計算することです。
S長さのバイナリ文字列を考えnます。からインデックスを作成すると1、からまでの順序ですべてに対して完全にS[1..i+1]一致するかどうかを判断できます。例えば、S[n-i..n]i0n-1
S = 01010
与える
[Y, N, Y, N, Y].
これは、ある0試合0、01一致しない場合10、010一致は010、0101一致していない1010 し、最終的に01010自分自身にマッチします。
長さの考えられるすべての異なるビット文字列を繰り返し処理するときに取得するsとsのf(n)個別の配列の数になるように定義します。YN2^nSn
観察者は、この質問が私の最近の別の質問の簡単な変形であることに気付くでしょう。しかし、私は巧妙なトリックがこれをはるかに速く簡単にすることを期待しています。
仕事
でn開始を増やすに1は、コードで出力する必要がありますn, f(n)。
回答例
のn = 1..24正解は次のとおりです。
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
得点
あなたのコードは順番n = 1にそれぞれに対して答えを与えることから繰り返されるべきnです。実行全体の時間を計り、2分後に殺します。
あなたのスコアはあなたnがその時間に得る最高です。
引き分けの場合、最初の答えが優先されます。
コードはどこでテストされますか?
(Windows 7ホスト上の)LubuntuゲストVMのVirtualboxでコードを実行します。
私のラップトップは8GBのRAMとIntel i7 5600U@2.6 GHz(Broadwell)CPUを2コアと4スレッドで搭載しています。命令セットには、SSE4.2、AVX、AVX2、FMA3、およびTSXが含まれています。
言語ごとの主要なエントリ
- Rust bu Anders Kaseorg ではn = 599。
- N = 30でC汚れによる。cygwinでネイティブに実行すると、パラレルバージョンは32になります。