Ceci est un miroir: |
. Je viens de découvrir que vous pouvez coller un miroir au milieu d'une chaîne si la chaîne peut être mise en miroir sur elle-même! Par exemple, la chaîne abccba
. Si vous le coupez en deux, les deux moitiés sont des images miroir l'une de l'autre:
abc <--> cba
Donc, nous pouvons coller un miroir au milieu de la chaîne, et notre nouvelle chaîne est abc|cba
. Parfois, seule une partie de la chaîne peut être mise en miroir sur elle-même. Par exemple, la chaîne "miroir". Les deux r sont en miroir, mais pas le reste de la chaîne. C'est OK, nous allons simplement supprimer les parties de la chaîne qui ne se reflètent pas et nous obtenons la chaîne suivante:
r|r
Certaines chaînes peuvent être mises en miroir à plusieurs endroits. Par exemple, "Bonjour tout le monde, xyzzyx". J'aime que beaucoup de texte se reflète dans mon miroir, vous devez donc trouver le meilleur endroit pour placer mon miroir. Dans ce cas, vous devez sortir la chaîne en miroir plus longue et, comme dans notre dernier exemple, supprimer tout le reste. Cette chaîne devient:
xyz|zyx
Certaines chaînes semblent pouvoir être mises en miroir, mais ne le peuvent pas. Si une chaîne ne peut être mise en miroir nulle part, vous ne devez rien produire.
Le défi:
Étant donné une chaîne contenant uniquement ascii imprimable, trouvez le meilleur endroit pour mettre mon miroir. En d'autres termes,
Trouvez la plus grande sous-chaîne palindromique de longueur paire, puis affichez-la avec un caractère de tuyau '|' au milieu.
L'entrée comprendra de 1 à 50 caractères.
Vous pouvez supposer que l'entrée ne contiendra pas de miroirs |
ou de nouvelles lignes. Au-delà de cela, tous les caractères ascii imprimables sont du jeu équitable. Si la sous-chaîne en miroir la plus longue est liée entre deux sous-chaînes, vous pouvez choisir celle à afficher. Par exemple, pour la chaîne "abba ollo", vous devez sortir "ab | ba" ou "ol | lo", mais peu importe celle que vous sortez. Les chaînes sont sensibles à la casse, par exemple "ABba" ne doit pas sortir "AB | ba", il doit sortir la chaîne vide.
Exemple d'E / S:
"Hello World" --> "l|l"
"Programming Puzzles and Code-Golf" --> Either "m|m" or "z|z"
"abcba" --> ""
"Hulluh" --> "ul|lu"
"abcdefggfedcba" --> "abcdefg|gfedcba"
"abcdefggfabc" --> "fg|gf"
"AbbA" --> "Ab|bA"
"This input is a lot like the last one, but with more characters that don't change the output. AbbA" --> "Ab|bA"
Comme d'habitude, il s'agit de code-golf, donc les failles standard s'appliquent et la réponse la plus courte en octets l'emporte!
la source
Réponses:
Pyth -
19171513 octetsMerci à @FryAmTheEggman de m'avoir sauvé deux octets.
ARRGH le cas spécial pour aucune réponse.Résolu ça!Suite de tests .
la source
:Q)
= Bignose05AB1E ,
191714 octetsCode:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne! .
la source
Python 2,
10297 octetsPlutôt lent et inefficace ... Vérifiez les plus petits cas de test sur Ideone .
la source
JavaScript,
100 à99 octetsou
la source
eval
?eval
à éviterreturn
for
n'est pas une expression, donc il faudrait normalement des accolades et unreturn
Lua, 133 octets
Vérifiez tous les tests sur Ideone.com .
la source
t==t:reverse()
pour enregistrer un octet :)Rétine , 66 octets
Le nombre d'octets suppose un codage ISO 8859-1.
Essayez-le en ligne! (La première ligne permet de tester simultanément plusieurs cas de test séparés par un saut de ligne.)
Hmmm, beaucoup plus longtemps que je ne le souhaiterais ...
la source
JavaScript (ES6), 91
Moins golfé
Tester
la source
Perl 5,
10510098 + 1 =10610199 octetsJe voulais juste essayer les expressions rationnelles récursives. A besoin de l'
-p
option. Edit: Sauvegardé (barré 4) 7 octets grâce à @ msh210. (L'octet manquant est dû à une sauvegarde qui a été remplacée par la dernière sauvegarde de @ msh210.)la source
@_=(@_,$1)
peut l'êtrepush@_,$1
. (2) Omettez les nouvelles lignes et la finale;
. (3) Je pense qu'il ya une condition de tri plus courte , vous pouvez utiliser (si rien d' autre, du moins peut - être --- --- substitut-
pour<=>
)-
et cela n'a pas fonctionné (a probablement besoin de parens pour la priorité, ce qui annule la sauvegarde).y...c>>1
ouy...c/2
au lieu delength>>1
. (Non testé.)Python 2, 91 octets
Remplacez-le
\x7f
par le caractère réel DEL, qui est ASCII 127 (crédit à Dennis).Cela suit une stratégie similaire à la réponse de Dennis d'utiliser
max
et de ramifier récursivement pour trouver l'intervalle palindrome le plus long. Mais, à la place, il trouve la moitié gauche, vérifiant que la moitié droite miroir correspondante vient juste après avec un démarrage par soi-même .La fonction devine si le premier caractère se trouve dans la moitié gauche en miroir. Sinon, il le laisse tomber et revient sur le reste. Si c'est le cas, il est ajouté à la pile
p
de caractères inversés. Si la chaîne commence par la pile, la chaîne miroir est générée et considérée comme un miroir le plus long possible. Pour éviter|
en sortie, seules les piles non vides sont prises en compte.la source
Gelée , 17 octets
Essayez-le en ligne!
Fait avec l'aide de M. Xcoder et DJMcMayhem dans le chat
Comment ça marche
la source
Haskell,
126111 octetsla source
TSQL
227223 octetsJ'ai codé en dur la longueur jusqu'à 99 octets max, cela a sauvé des octets mais l'a rendu plus lent. Il a quand même une performance décente.
Golfé:
Non golfé:
Violon
la source
Python 2, 149 octets
Essayez-le en ligne
Ce programme trouve la première moitié de la plus grande sous-chaîne palindromique de longueur paire et imprime cette chaîne, suivie d'un
|
, puis de cette chaîne inversée. S'il n'y a pas de chaîne appropriée,t
sera la chaîne vide et'|'*(L(t)>0)
sera évaluée comme la chaîne vide.la source
Java 8,
294283232 octetsExplication:
Essayez-le ici.
la source