Isso é baseado no xkcd # 153 .
Crie um programa ou função nomeada com dois parâmetros, cada um dos quais é uma sequência de caracteres ou uma lista ou matriz de bytes ou caracteres. O segundo parâmetro conterá apenas caracteres extraídos lrfu
(ou os bytes ASCII equivalentes). Deve ser interpretado como uma série de instruções a serem executadas em uma sequência de bits representada pelo primeiro parâmetro.
O processamento realizado deve ser equivalente ao seguinte:
- Converta o primeiro parâmetro em uma única cadeia de bits formada concatenando os bits de cada caractere (interpretado como um dos ASCII de 7 bits, um ASCII estendido de 8 bits ou uma codificação Unicode padrão). Por exemplo, se o primeiro parâmetro for
"AB"
, esse seria um de10000011000010
(7 bits),0100000101000010
(8 bits ou UTF-8)00000000010000010000000001000010
ou01000001000000000100001000000000
(UTF-16 nas duas endiannesses), etc. - Para cada caractere no segundo parâmetro, em ordem, execute a instrução correspondente:
l
gira a sequência de bits da esquerda. Por exemplo,10000011000010
torna-se00000110000101
.r
gira a sequência de bits certa. Por exemplo,10000011000010
torna-se01000001100001
.f
vira (ou inverte) cada bit na cadeia de bits. Por exemplo,10000011000010
torna-se01111100111101
.u
inverte a cadeia de bits. Por exemplo,10000011000010
torna-se01000011000001
.
- Converta a sequência de bits em uma sequência ASCII que usa um caractere por bit. Por exemplo,
10000011000010
torna-se"10000011000010"
. Isso ocorre porque nem todos os conjuntos de 7/8 bits têm um caractere atribuído a eles.
Exemplo (em Python):
>>> f("b", "rfu")
01110011
Ele se transforma "b"
em sua representação binária ASCII de 8 bits 01100010
, gira-o para a direita ( 00110001
), vira cada bit ( 11001110
) e o inverte ( 01110011
).
Flexibilidade
Outros caracteres podem ser usados em vez dos personagens l
, r
, f
, e u
, mas eles devem ser claramente documentados.
Placar
Agradecemos ao @Optimizer por criar o seguinte snippet de código. Para usar, clique em "Mostrar trecho de código", role para baixo e clique em "► Executar trecho de código".
"rrfrburb"
? Além disso, quando alguém muda ou reverte os bits, o faz para cada letra individual ou para a cadeia como um todo? Mais casos de teste tornariam isso mais claro.