Wenn Sie schon einmal versucht haben, palindromischen Code zu schreiben, wissen Sie, wie viel Klammern Sie stören. ()()
ist kein Palindrom, obwohl es irgendwie so aussieht, wie es sein sollte, während ())(
und ()(
beide palindrom und beide sehr dumm aussehen. Wäre es nicht bequem, wenn es umgekehrt wäre?
Eine Zeichenfolge ist günstigerweise palindrom, wenn sie der Zeichenfolge entspricht, die abgeleitet wurde, wenn auf der Rückseite alle Klammern ( ()
), Klammern ( []
) und Klammern ( {}
) gespiegelt sind. Keine anderen Charaktere sind speziell und müssen umgedreht werden. ( <>
Werden manchmal gepaart, aber oft nicht, sodass sie weggelassen werden.)
Ihre Aufgabe ist es, in Ihrer Sprache ein Programm (Eingabe über STDIN) oder eine Funktion (Eingabe über ein einzelnes String-Argument) zu schreiben, das (a) einen konsistenten wahren Wert * ergibt, wenn sein Argument bequemerweise palindromisch und ein anderes, konsistentes falsch ist Wert sonst, und (b) ist selbst bequem palindromisch.
Zum Beispiel sind die folgenden Eingaben bequemerweise palindrom:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
Und die folgenden sind nicht:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Sie dürfen sich auf keinen externen Status (bestimmten Dateinamen, Verzeichnisstruktur, andere Benutzereingaben, Webzugriff usw.) mit Ausnahme von Interpreter- / Compiler-Flags verlassen.
Sie dürfen auch nicht den Kommentar-Trick verwenden, wenn Sie einen Teil des Codes auskommentieren oder ungenutzt rendern, indem Sie die Kommentarfunktionen Ihrer Sprache nutzen. Zum Beispiel sind alle folgenden Elemente nicht zulässig, da sie nicht funktionsfähige Teile enthalten, die sicher entfernt oder zerstört werden können (auf Kosten des Verlusts der Palindromie):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Dies deckt natürlich nicht jeden dieser Fälle ab, aber der Kern der Herausforderung besteht darin, keine Kommentare und nicht analysierten ** Code zu verwenden, um Palindromie zu erzielen, sondern die korrigierten Klammern und Parens zu verwenden. Ich sehe dich an, LISP, Brainfuck.
Dies ist ein Codegolf , also gewinnt der kürzeste Code, aber alle Codelängen sind willkommen.
* Mit konsistenten wahren und falschen Werten meine ich, dass Sie einen von zwei Werten zurückgeben können, z. B. 1
für wahr und 0
falsch oder False
für wahr und "no"
falsch, solange sich diese Werte voneinander unterscheiden und nicht Wechseln Sie von Ausführung zu Ausführung Ihres Programms. Verwenden Sie, was Sie Charaktere rettet.
** Nicht zu verwechseln mit nicht ausgeführtem Code: Code, der gültig ist und seltsame Dinge tun kann, aber niemals aufgerufen wird, ist in Ordnung.
(eslaf)fi
, können Sie verwenden if(false)
.
()()
if(false){some code}
oder nicht verwendeten Variablen? Dürfen sie?