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