Це засновано на 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"
? Крім того, коли один змінює або повертає біти, чи робить це для кожної окремої літери чи рядка в цілому? Більше тестових випадків зробить це зрозумілішим.