Il s'agit d'une question complémentaire à ma question Puzzling.SE : j'ai demandé s'il y avait une fonction f mappant les chaînes booléennes aux chaînes booléennes, de sorte que f (f (b)) = inverse (b) pour toutes les chaînes d'entrée b . (Par inverse , je veux dire la fonction qui inverse l'ordre des bits.)
Le lien ci-dessus contient une réponse positive, avec preuve, par le grand f '' , mais vous voudrez peut-être réfléchir à la question par vous-même avant de regarder.
Implémentez une telle fonction f dans le moins d'octets possible.
Vous pouvez soit lire l'entrée de STDIN, soit prendre un argument de fonction; et soit écrivez la chaîne de résultat dans STDOUT, soit renvoyez-la.
Dans les deux cas, vous pouvez travailler avec des chaînes réelles de deux octets ou caractères distincts de votre choix (disons
0et1, ou\x00et\x01), ou avec des tableaux / listes de valeurs véridiques et fausses . Choisissez deux valeurs et respectez-les, cependant.Le résultat d'une seule application de f doit être une chaîne binaire: aucune réponse idiote comme
b -> if b starts with 'x' then reverse(b[1:]) else 'x' + b...Votre fonction doit être totale ; en particulier, l'entrée peut être la chaîne vide, ou un bit de long, etc. Il n'y a pas de limite supérieure pour la longueur de la chaîne.
Il doit également être pur : ne conservez aucun état global entre les appels de fonction; la chaîne d'entrée doit déterminer complètement la chaîne de sortie.