Рассмотрим двоичную строку 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 в Rust с использованием CryptoMiniSat, автор Anders Kaseorg. (В гостевой виртуальной машине Lubuntu под Vbox.)
- n = 35 в C ++ с использованием библиотеки BuDDy, автор Christian Seviers. (В гостевой виртуальной машине Lubuntu под Vbox.)
- n = 34 в клинго Андерс Касорг. (В гостевой виртуальной машине Lubuntu под Vbox.)
- n = 31 в Rust от Anders Kaseorg.
- n = 29 в Clojure от NikoNyrh.
- n = 29 в С по Bartavelle.
- n = 27 в Хаскеле по Бартавелле
- n = 24 в пари / гп по алефале.
- n = 22 в Python 2 + pypy мной.
- n = 21 в Mathematica от alephalpha. (Self сообщается)
Будущие награды
Теперь я дам 200 баллов за каждый ответ, который за две минуты достигнет n = 80 на моей машине.