Un palindrome est une chaîne épelée de la même manière, à l’avant comme à l’avant. Par exemple, 'Eva, puis-je poignarder des chauves-souris dans une grotte?' est un palindrome (EVACANISTAB | BATSINACAVE)
Pour ce code golf, en utilisant la langue de votre choix, déterminez si une chaîne donnée est un palindrome ou non.
Cas Edge:
- La ponctuation ne compte pas dans la palindromie.
- Les caractères de contrôle ne sont pas pris en compte dans la palindromie
- Les espaces blancs ne comptent pas pour la palindromie.
- Les nombres sont comptés en fonction de la palindromie.
- Le cas dans ce défi ne compte pas pour la palindromie.
- Il n'y a pas de limite à la longueur des chaînes à évaluer, à l'exception de ce qui est imposé par la langue de votre choix.
- Pour ce défi, limitez-vous au jeu de caractères ASCII.
Les pré-requis techniques:
- Seuls les corps de méthodes sont nécessaires; des éléments supplémentaires tels que les signatures de méthode, les déclarations de structure de données, etc. ne comptent pas pour l'exigence de victoire.
- Le code doit être compilé ou interprété sans erreurs ou exceptions lors de la compilation.
- Le code ne doit pas renvoyer d'exceptions non gérées ou de crash. (Presque inutile de dire. Presque.)
- Le code doit renvoyer une valeur indiquant le palindrominess. Le type de données dépend de la langue que vous utilisez (par exemple, un utilisateur C # peut utiliser un
bool
, alors qu'un utilisateur JavaScript peut utiliser unvar
.) - Vous ne pouvez pas écrire votre propre interprète qui effectue cette tâche en tant que capacité «native» afin de pouvoir «jouer» un score presque gagnant. (J'espère inutile de le dire.)
Condition de victoire:
- Le code le plus court en caractères gagne.
Chef actuel: tmartin (k, 25 caractères)
... Voulez-vous la coche verte verte par votre réponse? Battez la réponse de ce type!
code-golf
palindrome
decision-problem
Andrew Gray
la source
la source
Réponses:
K, 25
.
la source
{x~(|)x:(_)x inter(,/).Q`a`A`n}
{#|:\_x@&x in,/.Q`a`A`n}
, où 1 est vrai et 2 est fauxPerl, 26 caractères
Evalue à 1 quand
$_
est un palindrome""
(une des fausses valeurs de Perl) quand ce n'est pas le cas.Exemple d'utilisation:
sortie:
la source
_
chaîne dans la chaîne, est-ce que ça va? Et cela ne nécessite aucune entrée, vous n’avez donc pas besoin d’utiliser cette-p
option?\W
dans les expressions rationnelles exclut le trait de soulignement. Je crains que vous ayez besoin[^a-z\d]
de votre regex. J'ai peur d'être battu de toute façon._|\W
au lieu de[_\W]
._|\W
à\Pl
: ideone.com/0ufdaQ . Devrait être juste les lettres Unicode.\Pl
ne correspondrait pas aux chiffres, alors je suppose que_|\W
c'est le mieux que vous puissiez faire.C # 82 seulement :)
Impossible de résister à la tentation d'écrire un programme sans passe-partout dans ma langue préférée.
Un test est disponible ici: http://ideone.com/8bwz7z
la source
GolfScript,
36 34 3130 caractèresAlgorithme similaire à ma solution précédente (Javascript) .
0"0:A[a{"@{>^}+/
- Optimisé par Peter Taylor et Howard. Ma version était"/9@Z"{1$<},,2%\;
. Howard a fait don de la concaténation de fonctions et Peter Taylor a fait don de XOR pour modulo-2. C'est fondamentalement une méthode générique de comparaison si la valeur est dans une séquence de plages.{.96>32*-}%
(11 caractères) n’est pas vraiment une amélioration par rapport à Javascript.toUpperCase()
(14 caractères), d’autant plus qu’il modifie quelques signes de ponctuation étranges qui suiventz
dans la table ASCII (ce qui n’importe pas ici).comme l'a suggéré Peter Taylor, cependant, si nous filtrons d'abord les caractères alphanumériques, nous pouvons convertir en minuscules et en chiffres simplement en définissant un bit dans chaque caractère:
{32|}
.-1%=
fait tout le levage palindromique lourd. Une partie que je n’apprécie pas vraiment, c’est combien de temps il m’a fallu pour savoir comment inverser un tableau. J'aurais dû lire la documentation. Les deux autres personnages effectuent la gestion et la comparaison des piles.Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7IjA6QVyyJcez59KywsMiV9LHszMnx9JS4tMSU9
De plus, si je peux supposer qu’aucun des caractères de contrôle suivants n’est présent: (échappement de liaison de données, contrôle de périphérique 1-4, accusé de réception négatif, repos synchrone, bloc de fin de transmission, annulation, fin de support) (nous sommes tous d’accord pour dire que tous assez obscurs) ou si je peux les traiter comme des versions majuscules des chiffres 0 à 9, nous pouvons enregistrer deux autres caractères:
GolfScript, 28 caractères
Test: http://golfscript.apphb.com/?c=IkV2YSwgY2FuIEkgc3RhYiBiYXRzIGluIGEgY2F2ZT8iCgp7MzJ8fSV7MCIwOmF7IkB7Pl59Ky99LC4tMSU9
la source
{"0:A["\{>}+,,2%},
+
sur des blocs. C'est un truc cool.a{
à la liste de caractères du filtre pour inclure les lettres minuscules, mais vous pouvez ensuite utiliser des majuscules{32|}%
. Le résultat final est{"0:A[a{"\{>}+,,2%},{32|}%.-1%=
0"0:A[a{"@{>^}+/
le travail aussi.Javascript, 53 caractères:
est une expression javascript qui vaut true si
x
est un palindrome, false si ce n'est pas le cas. Il suppose quex
c'est une chaîne. Si ce n'est pas garanti, préférezx+="",
Voici un fil d'Ariane: En raison de la façon dont
reverse()
fonctionne,échoue. cependant,
est parfaitement bien.
la source
+""
attribue à une chaîne,+
attribue à un nombre|0
et~~
attribue à un entier,!!
attribue à un booléen./[^\W_]/g
R: 66
Usage:
la source
Bash:
524846 caractèresCela prend la piqûre à vérifier en tant que premier paramètre et définit le code de sortie à 0 pour palindrome et à 1 pour non.
Échantillon échantillon:
la source
Python 2: 49 (sans compter la signature de la méthode)
Un programme complet, avec entrée et sortie, peut être écrit en 74 caractères.
Exemple d'utilisation:
(
huge_palindrome.txt
contient ces 17 826 mots palindrome)Cette solution peut être adaptée au python 3 en ajoutant quelques caractères:
Python 3: 55
la source
sys.stdin.read
est fondamentalement la même chose queraw_input
s
variable. J'ai décidé de fournir la définition complète mais, comme à l'accoutumée en 2013,JAVA (ou la langue la plus prolixe de tous les temps),
1029695 car.Utilisation (avec du code non-golfé):
Raccourci avec l'aide du commentaire ci-dessous
la source
if(s==null) return 1==0;
? Ou bien Java applique-t-il les curlies sur lesif
instructions?null
une bonne habitude, mais non pratiquée dans CodeGolf. Comme je peux le constater, personne d'autre ne l'a fait dans cette question. Sauter. 2) L'espace entre les arguments facilite la lisibilité, mais pas le golf. Le retirer; 3) Au lieu de explicitementtoLowerCase()
utiliser la chaîneequalsIgnoreCase()
plus tard au lieu deequals()
. De cette façon, vous devez ajuster l'expression régulière, mais toujours 1 caractère plus court. pastebin.com/s7H84fajreplaceAll("[^A-Za-z0-9]","")
=>replaceAll("\\W","")
replaceAll("\\W|_","");
supprimer_
aussi => 95 caractèresMathematica
5453Un octet enregistré grâce à CatsAreFluffy:
Pour ceux avec la version 10.2 ou antérieure:
Exemple
la source
PalindromeQ
est 1 octet de moins que#==Reverse@#&
PalindromeQ= #==Reverse@#&
J, 30 caractères
Usage:
la source
k (
50 48 4538 caractères)Supprime toutes les erreurs et renvoie la valeur par défaut
0b
(false).Exemple:
edit: rasé trois autres caractères en évitant la variable intermédiaire. H / T, CS. -7: Pas besoin de supprimer les erreurs.
la source
Ruby:
4338 caractèresÉchantillon échantillon:
la source
s.tr!('^A-Za-z0-9','').upcase!.reverse==s
!
méthodes! Tu me tiens incroyable @Howard avec tes astuces.tr
ettr!
semble se comporter différemment quand ils n'ont rien à translittérer: pastebin.com/4YThW2qN Cela faitp['757']
planter le test avec «NoMethodError: méthode indéfinie` upcase! ' pour nil: NilClass ”erreur.s=s.upcase.tr('^A-Z0-9','');s==s.reverse
C ++,
107(mal compté),100(mal compté), 81using namespace std;
.Utilise
int
parce que c'est plus court quechar
ouauto
.la source
Lua, 56 ans
la source
%W
quelque chose ressemble\W
à regex, il exclut également les caractères tels que le soulignement. Ceci est indésirable.%w
n'inclut pas_
(%W
inclut évidemment, alors)s=s:lower():gsub('%W','')return s:reverse()==s
46 caractèresfunction(s)
Python 3/2 59 caractères:
la source
Haskell, 43 ans
En utilisant les bibliothèques standard
Control.Monad
,Control.Monad.Instances
etData.Char
:la source
import Data.Char
import Control.Monad
ap(==)reverse.map toLower.filter isAlphaNum
ni avec l'ajout d'espaces ou autres, désolé je ne suis pas trop enthousiaste avec Haskell :)Control.Monad.Instances
aussi besoin . (J'utilise l'instance Reader Monad avecap
, mais cette instance n'est pas exportée parControl.Monad
.)PHP 60 caractères.
Essayez d'abord le codegolf.
Exemple:
la source
echo($x=preg_replace('/\W/','',strtolower($c)))==strrev($x);
.Python 2 64 caractères:
la source
77
version des caractères. Aucune idée de la raison pour laquelle abhiram a posté la version non-golfée.re.findall('[a-z0-9]+',input.lower())
raccourcit les caractères de la partie 3.Haskell 48
utilisé comme ceci:
la source
Smalltalk , Squeak / Pharo flavour
116 caractères en utilisant la mise en forme traditionnelle avec des onglets
Vous ajoutez deux méthodes à String:
Nous pourrions bien sûr éliminer certains espaces, ou utiliser des noms de méthode plus courts, mais ne trahissons pas l'esprit de Smalltalk.
De plus, cela traitera les palindromes français, comme dans http://fr.wikipedia.org/wiki/Liste_de_palindromes_fran%C3%A7ais , peu de réponses dans cette page peuvent.
la source
Python 3 (51 caractères)
et peut être Python 2
basé sur la solution d' abhiram (avec un golf plus agressif)
peut être réduit à 46 caractères, en utilisant RE '\ w'
et variante avec corps fonctionnel extrêmement raccourci (27 caractères)
la source
Windows PowerShell,
564745 caractèresMis à jour (voir les commentaires), et peut supprimer les crochets autour de l'expression régulière:
Original (56)
Original non-golfé:
la source
($s=$s-replace'[\W]')-eq(-join$s[$s.length..0])
($s=$s-replace'\W')-eq-join$s[$s.length..0]
.C ++, 74 octets
Ce code est en fait très élégant et facile à comprendre (lorsqu'il est correctement formaté). Je ne crois pas qu'il soit possible de raccourcir les choses en C ++ et il n'utilise aucune fonction de bibliothèque standard.
Exemple d'utilisation:
Version joliment formatée:
la source
error: ISO C++ forbids declaration of ‘p’ with no type
votre fonction devrait avoir un type de retour.while(*++e);
au lieu dewhile(*e)++e;
. Mais comme Titus l'a mentionné, cette réponse est invalide.PHP,
26 84 80 78 6263 octetsprend les entrées du premier argument de la ligne de commande; imprime
1
pour la vérité, chaîne vide pour la fausseté.I18n est un peu expansif, car il n'y a pas d'alternative multi-octets pour
strrev
(110 octets; exécuter avec-r
):utf8_strrev volé de manière flagrante dans le manuel PHP . Vous voudrez peut-être aussi jeter un coup d'œil à ce billet de blog .
la source
-R
causerait des problèmes avec les sauts de ligne dans la chaîne à tester, n'est-ce pas? A partir de la spécification "-R <code> Exécuter PHP <code> pour chaque ligne d'entrée". De plus<?=strrev($s=strtolower(preg_replace("#\W#","",$argn)))==$s;
serait plus court.$argn
sans-R
.$argv[1]="O Genie, der Herr ehre dein Ego!"; # :D
Ruby, 48 ans
Assez simple, et fait à la hâte, donc pas trop au golf. Je vais jouer au golf plus tard.
la source
Pylongolf2 , 24 octets
c
prend l’entrée,╨2
convertir en minuscule.Je place ensuite une expression rationnelle sur la pile et l’utilise
-
pour supprimer tous les caractères non alphabétiques de l’entrée._
duplique l'entrée.╨1
l'inverse et=
ensuite les compare.~
imprime la pile à l'extrémité qui imprime soittrue
oufalse
.la source
PowerShell,
194190 octetsUne implémentation récursive pour montrer comment un script de blocage PowerShell sans nom peut s'appeler.
ungolfed:
tests:
la source
[^a-z0-9]
pas être ça ?05AB1E , 4 octets (non concurrents)
Non compétitif , car la langue post-date le défi. Code:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne! .
la source
Gelée, 10 personnages (non en compétition)
Retourne 1 si vrai, 0 si faux
Essayez-le en ligne!
la source
fØBŒlŒḂ
:f
filtre pour garderØB
l'ensemble [a-zA-Z0-9] etŒl
converti en minuscules, puisŒḂ
test si palindrome.