Розглянемо двійковий рядок S
довжини n
. Індексація з 1
, ми можемо обчислити відстані Хеммінга між S[1..i+1]
і S[n-i..n]
для всіх i
в порядку від 0
до n-1
. Відстань Хеммінга між двома струнами однакової довжини - це кількість позицій, на яких відповідні символи різні. Наприклад,
S = 01010
дає
[0, 2, 0, 4, 0].
Це тому , що 0
матчі 0
, 01
має відстань Хеммінга два до 10
, 010
сірників 010
, 0101
має відстань Хеммінга чотири , щоб 1010
і , нарешті , 01010
відповідає самому собі.
Нас же цікавлять лише результати, де відстань Хеммінга становить не більше 1. Тож у цьому завданні ми повідомимо про те, Y
якщо відстань Хеммінга не більше одного, а N
інакше. Тож у нашому прикладі вище ми отримали б
[Y, N, Y, N, Y]
Визначте f(n)
кількість виразних масивів Y
s і N
s, які ви отримуєте при ітерації над усіма 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
по черзі. Я встигну весь пробіг, убивши його через дві хвилини.
Ваш бал - найвищий показник, який n
ви отримали за той час.
У разі зрівноваження виграє перша відповідь.
Де буде перевірений мій код?
Я буду запускати ваш код на своєму (трохи старому) ноутбуці Windows 7 під Cygwin. Як результат, будь-ласка, надайте будь-яку допомогу, яка допоможе вам зробити це легко
Мій ноутбук має 8 Гб оперативної пам’яті та процесор Intel i7 5600U@2,6 ГГц (Broadwell) з 2 ядрами та 4 потоками. Набір інструкцій включає SSE4.2, AVX, AVX2, FMA3 та TSX.
Провідні записи на кожній мові
- n = 40 в іржі за допомогою CryptoMiniSat, автор Anders Kaseorg. (У Lubuntu гість VM під Vbox.)
- n = 35 в C ++, використовуючи бібліотеку BuDDy, від Christian Seviers. (У Lubuntu гість VM під Vbox.)
- n = 34 в Клінго Андерс Касеорг. (У Lubuntu гість VM під Vbox.)
- n = 31 в іржі Андерса Касеорга.
- n = 29 у Clojure від NikoNyrh.
- n = 29 в С бартавеллом.
- п = 27 в Haskell від bartavelle
- n = 24 в Пари / гп по алефалфа.
- n = 22 в Python 2 + pypy мною.
- n = 21 в Mathematica від alephalpha. (Самозвітність)
Майбутні щедроти
Зараз я дам суму в 200 балів за будь-яку відповідь, що на моїй машині за дві хвилини досягне n = 80 .