Rebmu : 9 (mit Strafe) oder 13 (ohne)
Die langweilige Rebmu-Lösung ist 9 und trägt die palindromische Strafe. Ich zeige es trotzdem "nur weil":
rnRVaVRnr
Mit dem Trick, Großbuchstaben nicht zu überdecken, werden separate Wörter gebildet, und das Fehlen eines führenden Großbuchstaben bedeutet, dass wir kein festes Wort bilden, sondern fünf gewöhnliche Wörter produzieren:
rn rv a vr nr
Was ist eine Abkürzung für den entsprechenden Code (auch legal Rebmu):
return reverse a vr nr
Die Tatsache, dass vr und nr bedeutungslos sind, spielt keine Rolle, da sie trotz fehlender Zuordnung gültige Wörter sind. Der Evaluator führt also nur das aus return reverse a
... es funktioniert in beide Richtungen. Aber dies ist in gewissem Sinne analog zum langweiligen Cheat: Der Code ist nicht auskommentiert, aber er ist tot und wird nicht auf einem Pfad ausgeführt.
Für etwas Aufregenderes, für das es keine Strafe gibt, wie wäre es mit dieser 13-Zeichen-Lösung:
a VR :rv AvrA
Schauen wir uns an, wie dies auf den Vorwärts- und Rückwärtspfaden verarbeitet wird, wenn es erweitert wird. Nach vorne:
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!
Rückwärts als 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!
Auf der anderen Seite überschreibt die Rückwärtsvariante die Abkürzung für Reverse. Aber hey, es ist kein Palindrom und es sind nur 13 Charaktere. :-)
(Hinweis: Dies setzt voraus, dass Sie Rebmu im / args-Modus ausführen, wobei a das Standardargument für das Programm ist, das an den Interpreter in der Befehlszeile übergeben wird, und Sie das Ergebnis akzeptieren. Wenn das Lesen von der Standardeingabe tatsächlich eine Voraussetzung ist, sind die Dinge B. von 9 auf 11 Zeichen für die einfache Lösung: rnRVrArVRnr
Und wenn Sie aus dem Programm heraus auf die Standardausgabe drucken müssen, anstatt die Ausdrucksausgabe des Interpreters zu akzeptieren, bei der auch ein paar Zeichen hinzugefügt würden.)
-1%#%1-/1
oder-1%#%(0
?