Рассмотрим двоичную строку Sдлины n. Индексируя с 1, мы можем вычислить расстояния Хэмминга между S[1..i+1]и S[n-i..n]для всех iв порядке от 0до n-1. Расстояние Хэмминга между двумя строками одинаковой длины - это количество позиций, в которых соответствующие символы различны. Например,
S = 01010
дает
[0, 2, 0, 4, 0].
Это потому , что 0совпадения имеют расстояние Хэмминга от двух до , совпадения , расстояние Хэмминга от четырех до и, наконец, совпадают.001100100100101101001010
Однако нас интересуют только результаты, в которых расстояние Хэмминга не более 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 в 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 на моей машине.
