Hintergrund
Stack Cats ist eine reversible esoterische Sprache von Martin Ender. Jeder Befehl in Stack Cats ist entweder das Inverse von sich selbst (dargestellt als symmetrisches Zeichen, wie z. B. -_:T|
) oder hat ein inverses Kommando (dargestellt als Spiegelbild, wie z. B. ()
{}
[]
<>
). Stack Cats hat eine starke syntaktische Anforderung, dass das gesamte Programm das Spiegelbild von sich selbst sein sollte. Beachten Sie, dass dies bedeutet, dass jedes gültige Stack Cats-Programm ein natürliches spiegelbildliches Ambigramm ist .
Hier ist der gesamte Befehlssatz von Stack Cats:
- Selbstsymmetrisch:
!*+-:=ITX^_|
- Symmetrische Paare:
()
{}
[]
<>
\/
Alle anderen Zeichen sind ungültig. Alle Eingaben mit einem Zeichen, das nicht im obigen Zeichensatz enthalten ist, sollten false ausgeben.
Die Sprache unterliegt einer zusätzlichen Einschränkung, ()
und {}
Paare müssen immer ausgeglichen sein. Der Einfachheit halber müssen Sie diese Bedingung jedoch nicht überprüfen.
Im Folgenden finden Sie einige Beispiele für ein gültiges Stack Cats-Programm (beachten Sie auch hier, dass Sie nicht auf ausgeglichene Parens prüfen):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Diese sind nicht:
b<+>d
())(
({[<++<]})
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die bestimmt, ob die angegebene Zeichenfolge ein gültiges Stack Cats-Programm ist. Ihr Code sollte auch ein natürliches spiegelbildliches Ambigramm sein , was bedeutet:
- Ihr Code sollte ein Spiegelbild von sich selbst sein.
- Ihr Code kann eine oder mehrere Zeilenumbrüche enthalten, solange der gesamte Code, der auf natürliche Weise angezeigt wird, ein Spiegelbild von sich selbst ist.
- Sie können abschließende Leerzeichen in jeder Zeile weglassen oder hinzufügen, da dies die Anzeige nicht verändert.
- Tabulatorzeichen sind nicht zulässig, da sie eine gewisse Mehrdeutigkeit aufweisen.
Hinweis: Ihr Code muss kein gültiges Stack Cats-Programm sein. Es kann bestimmte zusätzliche Zeichen enthalten, die in Stack Cats nicht zulässig sind. (Siehe unten für die vollständige Liste.)
Zum Beispiel sind die folgenden zwei Programme symmetrisch (und somit eine gültige Einreichung ), während das dritte nicht ist:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- In Bezug auf "Spiegelsymmetrie" wird nur die Stack-Cats-Symmetrie berücksichtigt (z. B.
({IH})
ist keine gültige Einreichung, obwohl sie Spiegelsymmetrie aufweist). - Ihr Code kann nur diese Zeichensätze plus Zeilenvorschub enthalten:
- Selbstsymmetrisch: space (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- Symmetrische Paare:
()
/\
<>
[]
bd
pq
{}
- Selbstsymmetrisch: space (
Der Zeichensatz wird streng symmetrisch oder selbstsymmetrisch gewählt, wenn er als Code in SE angezeigt wird.
Ein- und Ausgang
Der Eingabebereich ist eine einzeilige Zeichenfolge aus druckbaren ASCII-Zeichen .
Sie können festlegen, ob die Eingabe als Zeichenfolge, Liste der Zeichen oder Liste der ASCII-Werte erfolgen soll.
Sie können wählen, ob Sie Folgendes ausgeben möchten:
- Alle wahrheitsgemäßen / falschen Werte, wie sie in der Sprache Ihrer Wahl definiert sind
- Die tatsächlichen Ergebniswerte können zwischen den Eingaben abweichen (z. B. Ausgabe 1 für eine wahrheitsgemäße Eingabe und 2 für eine andere wahrheitsgemäße Eingabe).
- Das Austauschen von wahren und falschen Werten ist nicht gestattet.
- Beliebige zwei konstante Werte für true / false
- In diesem Fall sollten die Ergebniswerte genau einer der beiden konstanten Werte sein.
Sie sollten Ihre Eingabemethode und Ausgabewerte in Ihrer Einreichung angeben.
Gewinnbedingung
Dies ist Codegolf , daher gewinnt das niedrigste Byte in jeder Sprache.
Anmerkungen
- Standardlücken sind wie gewohnt verboten.
- Natürlich können Sie dies in Stack Cats lösen, aber die Chance besteht darin, dass Sie kein Flag verwenden können, mit dem Sie Ihre Codegröße um die Hälfte reduzieren können. Und es ist sehr schwer, die Sprache zu lernen: P
#
verboten?