Esto se basa en xkcd # 153 .
Cree un programa o función con nombre que tome 2 parámetros, cada uno de los cuales es una cadena o una lista o matriz de bytes o caracteres. El segundo parámetro solo contendrá caracteres extraídos de lrfu
(o los bytes ASCII equivalentes). Debe interpretarse como una serie de instrucciones que deben realizarse en una secuencia de bits representada por el primer parámetro.
El procesamiento realizado debe ser equivalente al siguiente:
- Convierta el primer parámetro en una sola cadena de bits formada concatenando los bits de cada carácter (interpretado como uno de ASCII de 7 bits, un ASCII extendido de 8 bits o una codificación Unicode estándar). Por ejemplo, si el primer parámetro es
"AB"
, este sería uno de10000011000010
(7 bits),0100000101000010
(8 bits o UTF-8)00000000010000010000000001000010
, o01000001000000000100001000000000
(UTF-16 en las dos endianidades), etc. - Para cada carácter en el segundo parámetro, en orden, ejecute la instrucción correspondiente:
l
gira la cadena de bits a la izquierda. Por ejemplo, se10000011000010
convierte00000110000101
.r
gira la cadena de bits a la derecha. Por ejemplo, se10000011000010
convierte01000001100001
.f
voltea (o invierte) cada bit en la cadena de bits. Por ejemplo, se10000011000010
convierte01111100111101
.u
invierte la cadena de bits. Por ejemplo, se10000011000010
convierte01000011000001
.
- Convierta la cadena de bits en una cadena ASCII que utiliza un carácter por bit. Por ejemplo, se
10000011000010
convierte"10000011000010"
. Esto se debe a que no todos los conjuntos de 7/8 bits tienen un carácter asignado.
Ejemplo (en Python):
>>> f("b", "rfu")
01110011
Se convierte "b"
en su representación binaria ASCII de 8 bits 01100010
, la gira hacia la derecha ( 00110001
), voltea cada bit ( 11001110
) y la invierte ( 01110011
).
Flexibilidad
Otros caracteres se pueden utilizar en lugar de los caracteres l
, r
, f
, y u
, pero deben ser claramente documentados.
Marcador
Gracias a @Optimizer por crear el siguiente fragmento de código. Para usar, haga clic en "Mostrar fragmento de código", desplácese hasta la parte inferior y haga clic en "► Ejecutar fragmento de código".
"rrfrburb"
? Además, cuando uno cambia o invierte bits, ¿lo hace para cada letra individual, o la cadena como un todo? Más casos de prueba lo aclararían.