Это основано на 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"
? Кроме того, когда кто-то сдвигает или меняет биты, делает ли он это для каждой отдельной буквы или для строки в целом? Чем больше тестов, тем яснее.