Розглянемо двійковий рядок 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)кількість виразних масивів Ys і Ns, які ви отримуєте при ітерації над усіма 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 .
