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
0
et1
, ou\x00
et\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.
Réponses:
CJam, 32 octets
Essayez-le en ligne.
Trop long...
la source
Python 2, 64
69octetsNon golfé:
Cela trouve la période de la chaîne, c'est-à-dire la minimale
p
telle qu'unes
chaîne de longueurp
répétéen
(j'ai trouvé une méthode golfy sur SO). Ensuite, sin
c'est étrange, cela ajoute une répétition de plus de la période. S'iln
est pair, il supprime une répétition de la période et l'inverse.Merci à @ Sp3000 d'avoir aidé à implémenter le mappage de fonction entre 1 <-> 2, 3 <-> 4, etc.la source
Perl,
4947 octetsComprend +2 pour
-lp
Basé sur l'algorithme très agréable de @ feersum
Exécuter avec entrée sur STDIN, par exemple
halfreverse.pl
:Explication
la source