Étant donné une chaîne l
, recherchez toutes les sous p
- chaînes palindromiques de l
(y compris les doublons et les chaînes de caractères uniques). Ensuite, réorganisez toutes les sous-chaînes p
dans un palindrome valide (il peut y avoir plusieurs bonnes réponses). S'il n'est pas possible de réorganiser p
en un seul palindrome, votre programme peut avoir un comportement indéfini (erreur, débordement de pile, sortie, suspension / meurtre intempestif de John Dvorak, etc ...)
Exemples
Cas de test valides
l = anaa
p = ['a', 'n', 'a', 'a', 'aa', 'ana']
result = anaaaaana or aanaaanaa or aaananaaa
l = 1213235
p = ['1', '2', '1', '3', '2', '3', '5', '121', '323']
result = 1213235323121
l = racecar
p = ['r', 'a', 'c', 'e', 'c', 'a', 'r', 'cec', 'aceca', 'racecar']
result = racecarcecaacecracecar (there are others)
l = 11233
p = ['1', '11', '1', '2', '3', '33', '3']
result = 113323311 or 331121133
l = abbccdd
p = ['a', 'b', 'bb', 'b', 'c', 'cc', 'c', 'd', 'dd', 'd']
result = bbccddaddccbb or ccbbddaddbbcc or (etc...)
l = a
p = ['a']
result = a
Cas de test non valides (impossible)
l = 123456789
p = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
result = <not possible, behavior undefined>
l = hjjkl
p = ['h', 'j', 'jj', 'j', 'k', 'l']
result = <not possible, behavior undefined>
l = xjmjj
p = ['x', 'j', 'jmj', 'm', 'j', 'jj', 'j']
result = <not possible, behavior undefined>
Règles
- Si le mot d'entrée est lui-même un palindrome, il sera toujours valide comme entrée.
- Une seule sous-chaîne doit être retournée, celle que vous choisissez est arbitraire tant qu'elle est valide.
- Si l'entrée n'a pas de sortie viable, votre code peut avoir un comportement indéfini.
- Les entrées ne contiendront que des caractères imprimables ASCII entre
0x20-0x7E
. - C'est le code-golf , le nombre d'octets le plus bas est le gagnant.
code-golf
array-manipulation
permutations
palindrome
Urne de poulpe magique
la source
la source
"abbccdd"
est faux: les deux dernières lettres devraient l'être"bb"
, non"dd"
.Réponses:
Brachylog , 10 octets
Essayez-le en ligne!
Échoue (c'est-à-dire les impressions
false.
) si ce n'est pas possible.Explication
la source
Noix de coco , 140 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 193 octets
"Regarde maman, pas de permutation intégrée!" (Alors oui ... c'est long ...)
Renvoie un tableau vide s'il n'y a pas de solution.
Démo
Afficher l'extrait de code
Comment?
Divisons le code en parties plus petites.
Nous définissons P () , une fonction qui renvoie s si s est un palindrome, ou false sinon.
Nous calculons toutes les sous-chaînes de la chaîne d'entrée s . En utilisant P () , nous isolons les palindromes non vides et les stockons dans le tableau a .
La fonction récursive principale f () prend a comme entrée et calcule toutes ses permutations. Il met à jour S chaque fois que la permutation lui - même est un palindrome (une fois rejoint), et finalement retourne la valeur finale de S .
la source
Gelée , 13 octets
Essayez-le en ligne!
Imprime
0
dans le cas invalide.la source
05AB1E ,
1312 octetsEssayez-le en ligne!
-1 octet grâce à Magic Octopus Urn et Enigma.
la source
J
factorise automatiquement pour que vous n'ayez pas besoin€J
simplementJ
; vous êtes également censé rendre l'un des palindromes, pas tous. Essayez-le en ligne! est valide pour le même nombre d'octets.Ùć
pourrait être¤
(ou un certain nombre d'autres options)Ù
n'était pas nécessaire.Stax , 13 octets
Exécuter des cas de test (cela prend environ 10 secondes sur ma machine actuelle)
Il s'agit de la représentation ascii correspondante du même programme.
Ce n'est pas de la force brute tout à fait pure , mais c'est aussi petit que l'implémentation de force brute que j'ai écrite. Celui-ci a planté mon navigateur après environ 10 minutes. Quoi qu'il en soit, voici comment cela fonctionne.
la source
Rubis ,
131123120 120 octetsEssayez-le en ligne!
Un lambda acceptant une chaîne et renvoyant une chaîne. Renvoie
nil
lorsqu'aucune solution n'existe.-5 octets: remplacer
select{|t|l[t]}
parselect(&l)
-3 octets: remplacer
map{..}.flatten
parflat_map{...}
-1 octet: boucle sur la longueur de la sous-chaîne et le début de la sous-chaîne, au lieu de sur le début de la sous-chaîne et la fin de la sous-chaîne
-2 octets: Déclarez
z
à la première utilisation au lieu d'avancela source
Pyth , 13 octets
Essayez-le en ligne!
-1 octet merci à M. Xcoder
la source
h_I#sM.p_I#.:
oue_IDsM.p_I#.:
pour 13 octets.Python 3 , 167 octets
Essayez-le en ligne!
-2 octets grâce à M. Xcoder
la source
a[i:j+1]
si vous utilisez ensuite à lafor j in range(i,len(a))
place, pour -2 octets.Japt , 19 octets
Entravé par Japt ne pouvant pas (encore) obtenir toutes les sous-chaînes d'une chaîne (et en partie par mes niveaux d'épuisement actuels!).
Sorties
undefined
s'il n'y a pas de solution.Essayez-le
Explication
la source
¬
de votre réponse: P?m¬
mais j'en aurais eu besoinæ_¬êQ
pour qu'il n'ait de toute façon pas économisé d'octets!Décortiquer , 12 octets
Essayez-le en ligne!
Explication
la source
J , 53 octets
Essayez-le en ligne!
la source