Як працює кодування
Дано список бітів:
- Провести прайм (починаючи з
2
) - Майте список
- Для кожного біта на вході
- Якщо він такий самий, як і попередній біт, додайте до списку основну, яку ви тримаєте
- Якщо це інакше, утримуйте наступний простір і додайте його до списку
- Поверніть товар усіх номерів у вашому списку
- Для першого біта припустимо, що попередній біт був
0
Примітка: ці кроки призначені лише для ілюстрації, не потрібно виконувати їх.
Приклади
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
Ще кілька прикладів:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
Виклик
Напишіть кодер і декодер для цього методу кодування.
(Декодер повертає процес кодера).
Введення-виведення
Кодер може приймати дані в будь-якому розумному форматі
Кодер повинен виводити ціле число або рядок
Декодер повинен приймати вхід у тому ж форматі, що і кодер
Декодер повинен виводити той самий формат, який кодер приймає як вхід
Іншими словами decoder( encoder( input ) ) === input
Примітки
- Дешифратор може припустити, що його вхід декодируемо
- Ваша відповідь має стосуватися лише цілих чисел, які ваша мова може підтримувати, не використовуючи (
long
,bigInt
і т. Д.), Бути розумною, якщо мова підтримує лише вставки до 1, можливо, перегляньте публікацію відповіді
Оцінка балів
Ваш бал - це сума довжин у байтах кодера та декодера.
Якщо вам потрібно імпортувати модуль, імпорт може бути зарахований лише один раз за умови, що ваш кодер і декодер можуть співіснувати в одному файлі і повторно використовуватись (як функції).
Бійниці за замовчуванням заборонені.
Це код-гольф, тому найкоротший бал за кожну мову виграє.