Die Aufgabe besteht darin, OEIS A005434 so schnell wie möglich zu berechnen .
Betrachten Sie eine binäre Zeichenfolge mit Seiner Länge n. Indizierung von 1, können wir bestimmen, ob S[1..i+1]Übereinstimmungen S[n-i..n]genau für alle iin der Reihenfolge von 0bis übereinstimmen n-1. Zum Beispiel,
S = 01010
gibt
[Y, N, Y, N, Y].
Dies liegt daran, dass 0Übereinstimmungen 0, 01nicht übereinstimmen 10, 010übereinstimmen 010, 0101nicht übereinstimmen 1010 und schließlich 01010selbst übereinstimmen.
Definieren Sie f(n)die Anzahl der unterschiedlichen Arrays von Ys und Ns, die Sie erhalten, wenn Sie über alle 2^nmöglichen Bitfolgen Sder 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 nab 1sollte Ihr Code ausgegeben werden n, f(n).
Beispielantworten
Denn n = 1..24die 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 = 1die Antwort geben n. Ich werde den gesamten Lauf zeitlich festlegen und ihn nach zwei Minuten beenden.
Ihre Punktzahl ist die höchste, die nSie 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.