Die Aufgabe besteht darin, OEIS A005434 so schnell wie möglich zu berechnen .
Betrachten Sie eine binäre Zeichenfolge mit S
einer Länge n
. Indizierung von 1
, können wir bestimmen, ob S[1..i+1]
Übereinstimmungen S[n-i..n]
genau für alle i
in der Reihenfolge von 0
bis übereinstimmen n-1
. Zum Beispiel,
S = 01010
gibt
[Y, N, Y, N, Y].
Dies liegt daran, dass 0
Übereinstimmungen 0
, 01
nicht übereinstimmen 10
, 010
übereinstimmen 010
, 0101
nicht übereinstimmen 1010
und schließlich 01010
selbst übereinstimmen.
Definieren Sie f(n)
die Anzahl der unterschiedlichen Arrays von Y
s und N
s, die Sie erhalten, wenn Sie über alle 2^n
möglichen Bitfolgen S
der Länge iterieren n
.
Der Beobachter wird feststellen, dass diese Frage eine einfachere Variante einer anderen meiner jüngsten Fragen ist . Ich gehe jedoch davon aus, dass clevere Tricks dies viel schneller und einfacher machen können.
Aufgabe
Zum Erhöhen n
ab 1
sollte Ihr Code ausgegeben werden n, f(n)
.
Beispielantworten
Denn n = 1..24
die richtigen Antworten sind:
1, 2, 3, 4, 6, 8, 10, 13, 17, 21, 27, 30, 37, 47, 57, 62, 75, 87, 102, 116, 135, 155, 180, 194
Wertung
Ihr Code sollte sich wiederholen, wenn Sie nacheinander n = 1
die Antwort geben n
. Ich werde den gesamten Lauf zeitlich festlegen und ihn nach zwei Minuten beenden.
Ihre Punktzahl ist die höchste, die n
Sie in dieser Zeit erreichen.
Bei einem Unentschieden gewinnt die erste Antwort.
Wo wird mein Code getestet?
Ich werde Ihren Code unter Virtualbox in einer Lubuntu- Gast-VM (auf meinem Windows 7-Host) ausführen .
Mein Laptop verfügt über 8 GB RAM und eine Intel i7 5600U@2.6 GHz (Broadwell) CPU mit 2 Kernen und 4 Threads. Der Befehlssatz enthält SSE4.2, AVX, AVX2, FMA3 und TSX.
Führende Einträge pro Sprache
- n = 599 in Rust bu Anders Kaseorg.
- n = 30 in C von Grimy. Die parallele Version erreicht 32, wenn sie nativ in Cygwin ausgeführt wird.