Il y a eu plusieurs tentatives précédentes pour poser cette question, mais aucune n’est conforme aux normes modernes sur ce site. Par discussion sur Meta , je le republie de manière à permettre une concurrence loyale dans le cadre de nos règles modernes.
Contexte
Un palindrome est une chaîne qui "lit la même chose en avant et en arrière", c'est-à-dire que l'inverse de la chaîne est identique à la chaîne elle-même. Nous ne parlons pas de "palindromes commodes" ici, mais d'un renversement strict caractère par caractère; par exemple, ()()
n'est pas un palindrome, mais l' ())(
est.
La tâche
Ecrivez un programme ou une fonction prenant une chaîne S (ou l’équivalent approprié dans votre langue) en entrée et ayant une sortie Q (du type de votre choix). Vous pouvez utiliser tout moyen raisonnable pour saisir l’entrée et fournir la sortie.
- Lorsque l'entrée S est un palindrome, la sortie Q doit avoir une valeur A (identique pour tous les palindromes S ).
- Lorsque l'entrée S n'est pas un palindrome, la sortie Q doit avoir une valeur B (identique pour tout S non palindromique ).
- A et B doivent être distincts l'un de l'autre.
Ou en d'autres termes: mappez tous les palindromes sur une valeur et tous les non-palindromes sur une autre.
De plus, le programme ou la fonction que vous écrivez doit être un palindrome lui-même (c'est-à-dire que son code source doit être palindrome), ce qui en fait un défi à source restreinte .
Des clarifications
- Bien que
true
etfalse
soient des choix évidents pour A et B , vous pouvez utiliser deux valeurs distinctes pour vos sorties "is a palindrome" et "not a palindrome", qui ne doivent pas nécessairement être booléennes. - Nous définissons l'inversion de chaîne au niveau du caractère ici;
éé
est palindromique, que le programme soit codé en UTF-8 ou en Latin-1, même s'il ne s'agit pas d'une séquence d'octets palindromique après le codage UTF-8. - Cependant, même si votre programme contient des caractères non-ASCII, il ne doit fonctionner que pour une entrée ASCII. Spécifiquement, l’entrée S ne contiendra que des caractères ASCII imprimables (y compris l’espace, mais pas la nouvelle ligne). Cela signifie notamment que si vous traitez l'entrée comme une séquence d'octets plutôt qu'une séquence de caractères, votre programme sera toujours conforme à la spécification (sauf si le codage d'E / S de votre langue est très étrange). En tant que tel, la définition d'un palindrome dans la puce précédente importe uniquement lorsque vous vérifiez que le programme a une forme correcte.
- Cacher la moitié du programme dans un commentaire ou un littéral de chaîne, tout en étant peu créatif, est légal; vous êtes marqué sur la longueur, pas sur la créativité, alors n'hésitez pas à utiliser des méthodes «ennuyeuses» pour vous assurer que votre programme est un palindrome. Bien sûr, étant donné que votre score est long, certaines parties de votre programme qui ne font rien vont l’aggraver. Par conséquent, être capable d’utiliser les deux moitiés de votre programme sera probablement utile si vous pouvez le gérer. .
- Le critère de victoire étant mesuré en octets, vous devez spécifier le codage dans lequel votre programme est écrit pour pouvoir le marquer (bien que dans de nombreux cas, le codage que vous utilisez sera évident).
Critère de victoire
Même si le programme doit être un palindrome au niveau du personnage, nous utilisons des octets pour voir qui gagne. Plus précisément, plus votre programme est court, mesuré en octets, mieux c'est; c'est un défi de code-golf . Pour permettre la comparaison des soumissions (en particulier des soumissions dans la même langue), placez un nombre d'octets pour votre programme dans l'en-tête de votre soumission (plus un nombre de caractères, s'il diffère du nombre d'octets).
(
par a
et )
avec b
. Est abab
un palindrome? Non, il faudrait que ce soit abba
. Alors ce ()()
n'est pas un palindrome non plus; il faudrait que ce soit ())(
.
()() is not a palindrome, but ())( is.
Félicitations, vous êtes arrivé sur reddit!