Відмова: Кодування Левенштейна повністю не пов'язане з метрикою відстані редагування Левенштейна .
<Вставте довгу розповідь про те, чому коди Левенштейна потрібно обчислювати тут.>
Код
Кодування Левенштейна - це система присвоєння двійкових кодів негативним цілим числам, яка зберігає якесь дивне властивість у ймовірності, яке не має відношення до цього завдання. Позначимо цей код як L ( n ). Вікіпедія описує це як процес у п'ять кроків:
- Ініціалізуйте змінну відліку С до 1.
- Запишіть двійкове представлення числа, не ведучи
1
до початку коду. - Нехай M - кількість біт, записаних на кроці 2.
- Якщо M не дорівнює 0, з кроком C повторіть крок 2 з M як нове число.
- Напишіть C
1
бітів та a0
на початок коду.
Однак код також можна описати рекурсивно:
- Якщо число дорівнює 0, то його код дорівнює
0
. - Запишіть двійкове представлення числа, не ведучи
1
до початку коду. - Нехай M - кількість біт, записаних на кроці 2.
- Напишіть L ( M ) на початок коду.
- Напишіть
1
трохи на початок коду.
Для тих, хто вважає за краще приклади, ось рекурсивний процес для L (87654321) з позначенням конкатенації:
Змагання
Напишіть програму або функцію, яка, задавши число n , видає біт-рядки L ( n ) у будь-якому розумному форматі (це включає повернення числа із зазначеними бітами). Стандартні лазівки, як завжди, заборонено.
Приклади
Вхід: 5
Вихід: 1110001
Вхід: 30
Вихід: 111100001110
Вхід: 87654321
Вихід: 111110000101001001110010111111110110001
Вхід: 0
Вихід: 0
±
замість функціїf
.