Si vous avez déjà essayé d’écrire du code palindromique, vous sauriez combien de crochets ont tendance à vous gêner. ()()
n'est pas un palindrome, même si elle ressemble un peu comme il devrait être, tout ())(
et ()(
sont à la fois palindrome et à la fois très stupide regarder. Ne serait-ce pas pratique si c'était l'inverse?
Une chaîne est commodément palindromique si elle est égale à la chaîne dérivée lorsque son inverse a toutes ses parenthèses ( ()
), crochets ( []
) et accolades ( {}
) retournés. Aucun autre caractère n'est spécial et nécessite de basculer. ( <>
sont parfois jumelés mais souvent pas, ils sont donc laissés de côté.)
Votre tâche consiste à écrire, dans votre langue, un programme (prenant une entrée sur STDIN) ou une fonction (prenant un seul argument de chaîne) qui (a) donne une valeur vraie cohérente * lorsque son argument est commodément palindromique et une valeur différente, cohérente valeur autrement, et (b) est elle - même idéalement palindromique.
Par exemple, les entrées suivantes sont commodément palindromiques:
racecar
(a)(bb)(a)
void main(int argc, *char[] argv) {} (vgra []rahc* ,cgra tni)niam diov
Et ce qui suit ne sont pas:
non-palindrome
A nut for a jar of tuna?
(old [style] parens) )snerap ]elyts[ dlo(
ingirumimusnocte)etconsumimurigni
Vous ne pouvez pas vous fier à un état externe (nom de fichier spécifique, structure de répertoire, autre entrée utilisateur, accès Web, etc.) à l'exception des indicateurs interprète / compilateur.
En outre, vous ne pouvez pas utiliser "l'astuce de commentaire" pour commenter ou rendre du code inutilisé en tirant parti des fonctionnalités de commentaire de votre langue. Par exemple, tous les éléments suivants ne sont pas autorisés, car ils contiennent des parties non fonctionnelles qui peuvent être supprimées ou détruites en toute sécurité (au détriment de la perte commode-palindromique):
{some code} // {edoc emos}
{some code} NB.BN {edoc emos}
"n\" ;{edoc emos} ;"; {some code}; "\n"
Évidemment, cela ne couvrira peut-être pas tous les cas de ce genre, mais l’esprit du défi ici n’est pas d’utiliser des commentaires et du code non analysé ** pour obtenir la couleur claire, mais plutôt d’utiliser les parenthèses et parenthèses corrigées. Je te regarde, LISP, Brainfuck.
C'est un code-golf , donc le code le plus court gagne, mais toutes les longueurs de code sont les bienvenues.
* Par valeurs vraies et fausses cohérentes, je veux dire que vous pouvez renvoyer une paire de valeurs, telles que 1
vrai et 0
faux, ou False
vrai et "no"
faux, tant que ces valeurs sont différentes les unes des autres et qu'elles ne le sont pas. changez d'une exécution à l'autre de votre programme. Utilisez tout ce qui vous sauve des personnages.
** Ne pas confondre avec non exécuté : un code valide qui pourrait faire des choses étranges mais jamais appelé convient.
(eslaf)fi
, vous devez l’utiliser if(false)
.
()()
n'est pas un palindrome
if(false){some code}
ou des variables non utilisées? Sont-ils autorisés?