Кількість змінної довжини (також називається VLQ або uintvar
) - це спосіб кодування до 28-бітового цілого числа, використовуючи лише стільки байтів, скільки необхідно. Це було використано у форматі файлу MIDI як спосіб мінімізувати розмір певних даних про події.
Спосіб роботи досить простий. Як велика-ендіанська серія байтів, найзначніший біт (MSB) кожного байта - це 1
вказівка на те, що наступний байт VLQ слідує. Решта 7 біт кожного байту становлять декодоване значення.
Приклад (з Вікіпедії):
[ 0x86, 0xc3, 0x17 ] => 106903
Додаткові посилання: Wikipedia , Some Guy .
Виклик:
Враховуючи величину змінної довжини, перетворіть її на ціле число.
Вхід:
Список від одного до чотирьох байтів або тип 32-бітного значення, що представляє дійсний VLQ цілого числа.
Вихід:
Ціле значення вводу VLQ.
Правила та оцінка:
- Це код-гольф, тому найкоротша відповідь у байтах за кожну мову виграє.
- Застосовуються стандартні правила та правила вводу / виводу за замовчуванням .
- Лазівки заборонені (звичайно).
- Будь ласка, надайте посилання з тестом для вашого коду ( TIO.run тощо).
- Дуже рекомендується чітке пояснення вашої відповіді.
- Вбудовані модулі , які обробляють це перетворення не заборонені, проте НЕ їх використання є набагато цікавішим.
Тестові приклади:
Input (VLQ) Output (int)
[ 0x00 ] => 0
[ 0x07 ] => 7
[ 0x7f ] => 127
[ 0x81, 0x00 ] => 128
[ 0xC0, 0x00 ] => 8192
[ 0xff, 0x7f ] => 16383
[ 0x81, 0x80, 0x00 ] => 16384
[ 0x86, 0xc3, 0x17 ] => 106903
[ 0xbd, 0x84, 0x40 ] => 1000000
[ 0xff, 0xff, 0x7f ] => 2097151
[ 0xC0, 0x80, 0x80, 0x00 ] => 134217728
[ 0xFF, 0xFF, 0xFF, 0x7F ] => 268435455
Примітка: від вас не потрібно використовувати шістнадцяткові букви, щоб представляти байт як ваш вхід чи вихід. Ви можете використовувати десятковий буквальний ( [ 129, 128, 0 ]
), ціле число (0x80818000
) або будь-яке інше розумне байт / октетне представлення, якщо воно краще підходить для вашої платформи. Формат є гнучким, якщо він становить 1-4 байт / октет.
Гольф геть!
[0x01, 0x80, 0x02] => 1
?