introduction
Pour ceux qui ne savent pas, un palindrome est quand une chaîne est égale à la chaîne en arrière (à l'exception de l'interponction, des espaces, etc.). Un exemple de palindrome est:
abcdcba
Si vous inversez cela, vous vous retrouverez avec:
abcdcba
C'est pareil. Par conséquent, nous appelons cela un palindrome. Pour palindromiser les choses, regardons un exemple de chaîne:
adbcb
Ce n'est pas un palindrome. Pour palindromiser cela, nous devons fusionner la chaîne inversée dans la chaîne initiale à droite de la chaîne initiale , en laissant les deux versions intactes. Plus c'est court, mieux c'est.
La première chose que nous pouvons essayer est la suivante:
adbcb
bcbda
^^ ^^
Tous les caractères ne correspondent pas, ce n'est donc pas la bonne position pour la chaîne inversée. On fait un pas à droite:
adbcb
bcbda
^^^^
Cela ne correspond pas non plus à tous les personnages. On fait un autre pas à droite:
adbcb
bcbda
Cette fois, tous les personnages correspondent . Nous pouvons fusionner les deux chaînes en laissant intactes . Le résultat final est:
adbcbda
Ceci est la chaîne palindromisée .
La tâche
Étant donné une chaîne (avec au moins un caractère) ne contenant que des lettres minuscules (ou majuscules, si cela convient mieux), sortez la chaîne palindromisée .
Cas de test
Input Output
abcb abcba
hello hellolleh
bonobo bonobonob
radar radar
hex hexeh
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
la source
obonobo
serait une meilleure solution au cas de test.bono b o nob
c'est une phrase entière. Quelle est la différence entre Dieu et Bono? Dieu ne se promène pas dans Dublin en faisant semblant d'être Bono ;-)Réponses:
Gelée,
1110 octetsEssayez-le en ligne!
Comment ça marche
la source
Pyth (commit b93a874), 11 octets
Suite de tests
Ce code exploite un bogue dans la version actuelle de Pyth, commit b93a874 . Le bogue est qui
_IJ+zb
est analysé comme s'il l'étaitq_J+zbJ+zb
, ce qui équivaut à_I+zb+zb
quand il devrait (par l'intention de conception de Pyth) être analysé commeq_J+zbJ
, ce qui est équivalent à_I+zb
. Cela me permet d'enregistrer un octet - une fois le bug corrigé, le code correct sera.VkI_IJ+zbJB
. Je vais plutôt expliquer ce code.Fondamentalement, la brute de code force toutes les chaînes possibles jusqu'à ce qu'elle trouve la chaîne la plus courte qui peut être ajoutée à l'entrée pour former un palindrome et génère la chaîne combinée.
la source
Python, 46 octets
Si la chaîne est un palindrome, renvoyez-la. Sinon, placez la première lettre en sandwich autour du résultat récursif pour le reste de la chaîne.
Exemple de ventilation:
la source
s!=s[::-1]
)Haskell, 36 octets
Plus lisible:
Si la chaîne est un palindrome, renvoyez-la. Sinon, placez la première lettre autour du résultat récursif pour la queue de la chaîne.
La chaîne
s
est divisée enh:t
deuxième garde, ce qui évite un remplissage1>0
pour ce cas. C'est plus court que de le faires@(h:t)
pour l'entrée.la source
Pyth -
1612 octets4 octets enregistrés grâce à @FryAmTheEggman.
FGITW, beaucoup de golf possible.
Suite de tests .
la source
Brachylog ,
1665 octets (non concurrent)Essayez-le en ligne!
Quand j'ai posté ma réponse initiale, elle était toujours sur l'ancienne implémentation en Java. Comme j'ai tout reprogrammé dans Prolog, cela fonctionne maintenant comme il se doit en premier lieu.
Explication
La rétropropagation permet à la première valeur valide de
A
trouver la plus courte que vous pouvez concaténer à Input pour en faire un palindrome.Solution alternative, 5 octets
C'est à peu près la même chose que la réponse ci-dessus, sauf qu'au lieu d'indiquer "la sortie est la concaténation de l'entrée avec une chaîne
A
", nous déclarons que "la sortie est une chaîne pour laquelle l'entrée est un préfixe de la sortie".la source
JavaScript (ES6), 92 octets
Calcule et supprime le chevauchement entre la chaîne d'origine et son inversion.
la source
Rétine,
2925Essayez-le en ligne!
Un grand merci à Martin pour 11 octets enregistrés!
Cela crée simplement une copie inversée de la chaîne et les étouffe ensemble. La seule partie vraiment fantaisiste de ceci est la méthode d'inversion:,
O^#r`.\G
qui se fait en utilisant le mode de tri. Nous trions les lettres de la deuxième chaîne (celles qui ne sont pas des sauts de ligne et qui sont consécutives à la fin de la chaîne, grâce au\G
) par leur valeur numérique, qui, puisqu'il n'y a pas de nombre, est 0. Ensuite, nous inversons le ordre des résultats de ce type stable avec le^
option. Tout crédit pour l'utilisation de fantaisie\G
appartient à Martin :)la source
CJam, 18 ans
Essayez-le en ligne
Explication:
la source
Lua,
8988 octetsJ'ai battu le Javascript! \ o / 1 octet enregistré grâce à @LeakyNun ^^
C'est un programme complet, prend son entrée comme argument de ligne de commande.
non golfé
la source
while
peuvent être supprimées?i=i+1end
?1end
comme un nombre hexadécimal. En règle générale, vous ne pouvez pas utiliser[abcdef]
directement après un nombre sans qu'il soit considéré comme un hexadécimal. Il y a encore une exception0x
.Prolog, 43 octets
Cela attend une chaîne de codes en entrée, par exemple sur SWI-Prolog 7:
a(`hello`).
Explication
Il s'agit essentiellement d'un portage de ma réponse Brachylog.
la source
Octave,
7875 octetsEnregistré 3 octets grâce à Eʀɪᴋ ᴛʜᴇ Gᴏʟғᴇʀ!
ideone échoue toujours pour les fonctions nommées, mais voici un test du code en tant que programme.
la source
Perl, 37 octets
Basé sur la réponse de xnor.
Comprend +2 pour
-lp
Exécuter avec entrée sur STDIN, par exemple
palindromize.pl
:la source
05AB1E , 18 octets
Code:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
Pyke, 15 octets
Essayez-le ici!
la source
J, 20 octets
Ceci est un verbe monadique. Essayez-le ici. Usage:
Explication
J'utilise le fait que la palindromisation de S est S + inverse (P) , où P est le préfixe le plus court de S dont la suppression entraîne un palindrome. En J, c'est un peu maladroit de faire une recherche du premier élément d'un tableau qui satisfait un prédicat; d'où l'indexation.
la source
Haskell, 68 octets
Exemple d'utilisation:
f "abcb"
->"abcba"
.Recherchez dans l'
inits
entréei
(par exempleinits "abcb"
->["", "a", "ab", "abc", "abcb"]
) jusqu'à ce que vous en trouviez une où elle est inversée pouri
construire un palindrome.la source
r=reverse
aller avantf i=
...?MATL ,
1716 octetsLibrement inspiré de la réponse CJam de @ aditsu .
Essayez-le en ligne!
Explication
la source
Rubis, 44 octets
Cette réponse est basée sur les solutions Python et Haskell de xnor .
la source
==s?s:
??
entre?:
pour ternaire et la?x == 'x'
substitution utilisée depuis Ruby 1.9Oracle SQL 11.2, 195 octets
Non golfé
la source
Sérieusement, 34 octets
Le dernier caractère est un espace insécable (ASCII 127 ou
0x7F
).Essayez-le en ligne!
Explication:
la source
C #, 202 octets
J'ai essayé.
Non golfé:
Quelqu'un peut-il me fournir des idées pour regrouper les deux appels à .Reverse (). ToArray ()? Une méthode distincte est plus d'octets.
la source
QBIC , 41 octets
Explication:
la source
Haskell, 46 octets
Je me demande s'il y a un moyen de supprimer les parenthèses dans
(f$tail l)++[l!!0]
...la source