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)00000000010000010000000001000010ou01000001000000000100001000000000(UTF-16 nas duas endiannesses), etc. - Para cada caractere no segundo parâmetro, em ordem, execute a instrução correspondente:
lgira a sequência de bits da esquerda. Por exemplo,10000011000010torna-se00000110000101.rgira a sequência de bits certa. Por exemplo,10000011000010torna-se01000001100001.fvira (ou inverte) cada bit na cadeia de bits. Por exemplo,10000011000010torna-se01111100111101.uinverte a cadeia de bits. Por exemplo,10000011000010torna-se01000011000001.
- Converta a sequência de bits em uma sequência ASCII que usa um caractere por bit. Por exemplo,
10000011000010torna-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.