Esta é uma pergunta de acompanhamento para minha pergunta Puzzling.SE : Perguntei se há uma função f mapeando seqüências de caracteres booleanas para seqüências de caracteres booleanas, de modo que f (f (b)) = reverse (b) para todas as seqüências de entrada b . (Por reverso , quero dizer a função que reverte a ordem dos bits.)
O link acima contém uma resposta positiva, com prova, do ótimo f '' , mas você pode ponderar a questão antes de procurar.
Implemente essa função f no menor número de bytes possível.
Você pode ler a entrada de STDIN ou usar um argumento de função; e escreva a sequência de resultados em STDOUT ou retorne-a.
De qualquer maneira, você pode trabalhar com cordas reais de dois bytes distintas ou personagens de sua escolha (dizer
0e1, ou\x00e\x01), ou com matrizes / listas de truthy e valores Falsas . Escolha dois valores e fique com eles, no entanto.O resultado de uma única aplicação de f deve ser uma string binária: nenhuma resposta boba como
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b...Sua função deve ser total ; em particular, a entrada pode ser a sequência vazia, ou um pouco longa, etc. Não há limite superior para o comprimento da sequência.
Também deve ser puro : não mantenha nenhum estado global entre chamadas de função; a sequência de entrada deve determinar completamente a sequência de saída.