Відстань Хеммінга між двома струнами однакової довжини - це кількість позицій, на яких відповідні символи різні.
Дозвольте P
бути двійковим рядком довжини n
і T
бути двійковим рядком довжини 2n-1
. Ми можемо обчислити n
відстані Хеммінга між підрядками P
і n
довжиною кожної довжини, T
щоб перейти зліва направо і скласти їх у масив (або список).
Приклад послідовності дистанції Хеммінга
Нехай P = 101
і T = 01100
. Послідовність відстаней Хеммінга, яку ви отримуєте від цієї пари, становить 2,2,1
.
Завдання
Для збільшення n
починаючи з початку n=1
, розглянемо всі можливі пари двійкових рядків P
довжини n
та T
довжини 2n-1
. Є 2**(n+2n-1)
такі пари і, отже, багато послідовностей дистанцій Хеммінга. Однак багато з цих послідовностей будуть ідентичними. Завдання полягає в тому, щоб знайти скільки розрізнених для кожного n
.
Ваш код повинен виводити одне число на значення n
.
Оцінка
Ваш бал - це найвищий, який n
ваш код досягає на моїй машині за 5 хвилин. Час призначений для загального часу роботи, а не часу лише для цього n
.
Хто виграє
Перемагає людина з найвищим балом. Якщо двоє чи більше людей закінчуються однаковим балом, то це перша відповідь, яка виграє.
Приклад відповідей
Для n
від 1
до 8
оптимальних відповідей на цей питання 2, 9, 48, 297, 2040, 15425, 125232, 1070553
.
Мови та бібліотеки
Ви можете використовувати будь-яку доступну мову та бібліотеки, які вам подобаються. Там, де це можливо, було б добре запустити свій код, тому, будь-ласка, включіть повне пояснення, як запустити / скомпілювати свій код в Linux, якщо це можливо.
Моя машина Часи синхронізуються на моєму 64-бітному апараті. Це стандартна установка ubuntu з 8 Гб оперативної пам’яті, AMD FX-8350 восьмиядерний процесор та Radeon HD 4250. Це також означає, що мені потрібно мати можливість запускати ваш код.
Провідні відповіді
- 11 в C ++ за допомогою feersum. 25 секунд.
- 11 в C ++ Ендрю Епштейна. 176 секунд.
- 10 у Javascript від Ніла. 54 секунди.
- 9 в Хаскелл від німі. 4 хвилини і 59 секунд.
- 8 у Javascript від fəˈnɛtɪk. 10 секунд.
fastest-code
залишає більше місця для оптимізацій через оптимізацію рівня коду та хороший алгоритм. Тож я думаю, що faster-code
це краще, ніж faster-algorithm
.