Rebmu : 9 (avec pénalité) ou 13 (sans)
La solution ennuyeuse de Rebmu est 9 et porte la pénalité palindromique. Je vais le montrer quand même "juste parce que":
rnRVaVRnr
En utilisant l' astuce impassible de remarquer les majuscules des lettres, ce sont des mots séparés, et le manque de majuscule signifie que nous ne faisons pas un mot d'ensemble, nous produisons cinq mots ordinaires:
rn rv a vr nr
Ce qui est un raccourci pour le code équivalent (également Rebmu légal):
return reverse a vr nr
Le fait que vr et nr soient dénués de sens n'a pas d'importance, car bien qu'ils ne soient affectés à rien, ce sont des mots valides. L'évaluateur ne fait donc que return reverse a
... ça marche dans les deux sens. Mais cela est analogue dans un sens à la triche ennuyeuse: le code n'est pas commenté, mais il est mort et n'est pas exécuté sur un chemin.
Pour quelque chose de plus excitant qui n'encourt pas la pénalité, que diriez-vous de cette solution à 13 caractères:
a VR :rv AvrA
Voyons comment cela est traité sur ses chemins avant et arrière, une fois développé. Vers l'avant:
a ; evaluate a, as it is a string it has no side effects
vr: :reverse ; "set" vr to mean what a "get" of reverse means now
a: vr a ; assign a to calling "vr" on a, effectively reversing
; ^-- result of assign is last expression, the answer!
En arrière comme ArvA vr: RV a
:
a: reverse a ; assign A to its reversal
vr: rv: a ; make the abbreviation vr equal to assignment of a to rv
; ^-- result of assign is last expression, the answer!
À la baisse, la variante à l'envers écrase l'abréviation de reverse. Mais bon, ce n'est pas un palindrome, et c'est seulement 13 caractères. :-)
(Remarque: cela suppose que vous exécutez Rebmu en mode / args, où a est l'argument par défaut du programme transmis à l'interpréteur sur la ligne de commande et que vous acceptez le résultat. Si la lecture à partir de l'entrée standard est en fait une exigence, les choses passer par exemple de 9 à 11 caractères pour la solution simple:. rnRVrArVRnr
Et si vous devez imprimer sur une sortie standard à partir du programme au lieu d'accepter la sortie d'expression de l'interpréteur qui ajouterait également quelques caractères.)
-1%#%1-/1
ou-1%#%(0
?