Це засновано на xkcd # 153 .
Створіть програму або названу функцію, яка приймає 2 параметри, кожен з яких - це рядок або список або масив байтів або символів. Другий параметр буде містити лише символи, отримані з lrfu(або еквівалентних байтів ASCII). Це слід інтерпретувати як серію інструкцій, що виконуються на бітовій послідовності, представленій першим параметром.
Виконана обробка повинна бути еквівалентною наступному:
- Перетворіть перший параметр в єдиний бітовий рядок, утворений об'єднанням бітів кожного символу (інтерпретується як один із 7-бітових ASCII, 8-бітний розширений ASCII або стандартне кодування Unicode). Наприклад, якщо перший параметр є,
"AB"то це буде один із10000011000010(7-бітових),0100000101000010(8-бітових або UTF-8)00000000010000010000000001000010, або01000001000000000100001000000000(UTF-16 у двох обставинах) тощо. - Для кожного символу другого параметра для того, щоб виконати відповідну інструкцію:
lобертає бітне рядок зліва. Напр.10000011000010Стає00000110000101.rобертає біткорд праворуч. Напр.10000011000010Стає01000001100001.fперевертає (або перевертає) кожен біт у шматочку. Напр.10000011000010Стає01111100111101.uобертає біткорд. Напр.10000011000010Стає01000011000001.
- Перетворіть біткорд в рядок ASCII, в якому використовується один символ на біт. Напр.
10000011000010Стає"10000011000010". Це тому, що не всі набори 7/8 біт мають призначений їм символ.
Приклад (в Python):
>>> f("b", "rfu")
01110011
Він перетворюється "b"на 8-бітове двійкове представлення ASCII 01100010, обертає його праворуч ( 00110001), перевертає кожен біт ( 11001110) і повертає його назад ( 01110011).
Гнучкість
Інші символи можуть бути використані замість символів l, r, fі u, але вони повинні бути чітко задокументовані.
Табло
Дякуємо @Optimizer за створення наступного фрагмента коду. Для використання натисніть «Показати фрагмент коду», прокрутіть донизу та натисніть «► Запустити фрагмент коду».
"rrfrburb"? Крім того, коли один змінює або повертає біти, чи робить це для кожної окремої літери чи рядка в цілому? Більше тестових випадків зробить це зрозумілішим.