Betrachten Sie eine binäre Zeichenfolge Svon Länge n. Indizieren 1wir von , können wir die Hamming-Entfernungen zwischen S[1..i+1]und S[n-i..n]für alle iin der Reihenfolge von 0bis berechnen n-1. Der Hamming-Abstand zwischen zwei Saiten gleicher Länge ist die Anzahl der Positionen, an denen sich die entsprechenden Symbole unterscheiden. Beispielsweise,
S = 01010
gibt
[0, 2, 0, 4, 0].
Dies liegt daran, dass 0Übereinstimmungen 0, 01Hamming-Distanz zwei zu 10, 010Übereinstimmungen 010, 0101Hamming-Distanz vier zu 1010 und schließlich sich 01010selbst entsprechen.
Wir interessieren uns jedoch nur für Ausgaben, bei denen der Hamming-Abstand höchstens 1 beträgt. In dieser Aufgabe werden wir also eine Yangeben, wenn die Hamming-Distanz höchstens eins beträgt, und eine Nandere. Also in unserem obigen Beispiel würden wir bekommen
[Y, N, Y, N, Y]
Definieren Sie f(n)die Anzahl der verschiedenen Arrays von Ys und Ns, die Sie erhalten, wenn Sie alle 2^nverschiedenen möglichen Bitfolgen Sder Länge durchlaufen n.
Aufgabe
Zum Erhöhen nab 1sollte Ihr Code ausgegeben werden f(n).
Beispielantworten
Denn n = 1..24die richtigen Antworten sind:
1, 1, 2, 4, 6, 8, 14, 18, 27, 36, 52, 65, 93, 113, 150, 188, 241, 279, 377, 427, 540, 632, 768, 870
Wertung
Ihr Code sollte iterieren, nachdem Sie n = 1die Antwort für jede einzelne nnacheinander gegeben haben. Ich werde den gesamten Lauf zeitlich festlegen und ihn nach zwei Minuten töten.
Ihre Punktzahl ist die höchste, die nSie in dieser Zeit erreichen.
Bei einem Gleichstand gewinnt die erste Antwort.
Wo wird mein Code getestet?
Ich werde Ihren Code auf meinem (etwas alten) Windows 7-Laptop unter Cygwin ausführen. Bitte geben Sie daher jede mögliche Unterstützung, um dies zu vereinfachen.
Mein Laptop hat 8 GB RAM und eine Intel i7 5600U @ 2,6 GHz (Broadwell) -CPU mit 2 Kernen und 4 Threads. Der Befehlssatz umfasst SSE4.2, AVX, AVX2, FMA3 und TSX.
Führende Einträge pro Sprache
- n = 40 in Rust mit CryptoMiniSat von Anders Kaseorg. (In Lubuntu Gast-VM unter Vbox.)
- n = 35 in C ++ unter Verwendung der BuDDy-Bibliothek von Christian Seviers. (In Lubuntu Gast-VM unter Vbox.)
- n = 34 in Clingo von Anders Kaseorg. (In Lubuntu Gast-VM unter Vbox.)
- n = 31 in Rust von Anders Kaseorg.
- n = 29 in Clojure von NikoNyrh.
- n = 29 in C von Bartavelle.
- n = 27 in Haskell von Bartavelle
- n = 24 in Pari / gp von Alephalpha.
- n = 22 in Python 2 + pypy von mir.
- n = 21 in Mathematica von Alephalpha. (Selbst berichtet)
Zukünftige Kopfgelder
Ich werde jetzt eine Prämie von 200 Punkten für jede Antwort geben, die in zwei Minuten auf meinem Computer auf n = 80 steigt .
