Contexte
Stack Cats est un langage ésotérique réversible créé par Martin Ender. Chaque commande dans Stack Cats est soit l'inverse d'elle-même (représentée comme un caractère symétrique, comme -_:T|
), soit possède sa commande inverse (représentée comme l'image miroir, comme ()
{}
[]
<>
). Stack Cats a une forte exigence syntaxique que tout le programme soit l'image miroir de lui-même. Notez que cela signifie que tout programme Stack Cats valide est un ambigramme d'image miroir naturel .
Voici l'ensemble des commandes de Stack Cats:
- Auto-symétrique:
!*+-:=ITX^_|
- Paires symétriques:
()
{}
[]
<>
\/
Tout autre caractère n'est pas valide; toute entrée dont le caractère ne se trouve pas dans le jeu de caractères ci-dessus doit afficher false.
La langue a une contrainte supplémentaire ()
et les {}
paires doivent toujours être équilibrées, mais pour des raisons de simplicité, vous n'avez pas à vérifier cette condition.
Voici quelques exemples d'un programme Stack Cats valide (encore une fois, notez que vous ne vérifiez pas les parens équilibrés):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Ce ne sont pas:
b<+>d
())(
({[<++<]})
Défi
Écrivez un programme ou une fonction qui détermine si la chaîne donnée est un programme Stack Cats valide. Votre code doit également être un ambigramme d'image miroir naturel , ce qui signifie:
- Votre code doit être une image miroir de lui-même.
- Votre code peut avoir une ou plusieurs nouvelles lignes, tant que le code entier, affiché naturellement, est une image miroir de lui-même.
- Vous pouvez omettre ou ajouter des espaces blancs de fin sur chaque ligne, car cela ne change pas l'affichage.
- Les caractères de tabulation ne sont pas autorisés car ils présentent une certaine ambiguïté.
Remarque: votre code ne doit pas nécessairement être un programme Stack Cats valide; il peut contenir certains caractères supplémentaires qui ne sont pas autorisés dans Stack Cats. (Voir ci-dessous pour la liste complète.)
Par exemple, les deux programmes suivants sont symétriques (et donc une soumission valide ), tandis que le troisième ne l'est pas:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- En ce qui concerne la "symétrie miroir", seule la symétrie de style Stack Cats est prise en compte (par exemple,
({IH})
n'est pas une soumission valide, même si elle a une symétrie miroir). - Votre code ne peut contenir que ces jeux de caractères, plus la nouvelle ligne:
- Auto-symétrique: espace (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- Paires symétriques:
()
/\
<>
[]
bd
pq
{}
- Auto-symétrique: espace (
Le jeu de caractères est choisi pour être strictement symétrique ou auto-symétrique lorsqu'il est affiché sous forme de code sur SE.
Entrée et sortie
La plage d'entrée est une chaîne d'une ligne de caractères ASCII imprimables .
Vous pouvez choisir de prendre l'entrée comme une chaîne, une liste de caractères ou une liste de valeurs ASCII.
Vous pouvez choisir de sortir soit:
- N'importe laquelle des valeurs véridiques / fausses telles que définies par la langue de votre choix
- Les valeurs de résultat réelles peuvent différer entre les entrées (par exemple, la sortie 1 pour une entrée véridique et 2 pour une autre véridique).
- L'échange de valeurs véridiques et fausses n'est pas autorisé.
- Deux valeurs constantes respectivement pour vrai / faux
- Dans ce cas, les valeurs de résultat doivent être exactement l'une des deux valeurs constantes.
Vous devez spécifier votre méthode d'entrée et les valeurs de sortie dans votre soumission.
Condition gagnante
Il s'agit de code-golf , donc les octets les plus bas dans chaque langue l'emportent.
Remarques
- Les failles standard sont interdites comme d'habitude.
- Bien sûr, vous pouvez résoudre ce problème dans Stack Cats, mais il est possible que vous ne puissiez pas utiliser un indicateur qui permet de réduire de moitié la taille de votre code. Et c'est un langage vraiment difficile à comprendre: P
#
refusée?