Le code le plus court qui trouve tous les "sous-palindromes" uniques d'une chaîne, c'est-à-dire: toute sous-chaîne de longueur> 1 qui est un palindrome.
eg.1
input: "12131331"
output: "33", "121", "131", "313", "1331"
eg.2
input: "3333"
output: "33", "333", "3333"
333
? Naïvement, vous33
Réponses:
J, 24
3140Exemple d'utilisation:
Prenez ça, GolfScript!
la source
/dev/random
ici pour nous tromper ;-)~.(#~(1<#*]-:|.)&>),<\\.
(24 caractères)?Python 124
la source
Haskell 98, 88
9196la source
Python -
138136Ce code ne duplique pas les sous-palindromes.
la source
'"'+t+'"'
àt
pour économiser de l'espace, bien qu'il utilise des guillemets simples.Ruby -
126 10297 caractèresla source
Golfscript, 48 caractères
subpalindrome.gs
Usage:
La première opération
{,}{(;}/
transforme une chaîne en une liste de sous-chaînes de fin. Une transformation de sous-chaînes de tête similaire est ensuite mappée sur le résultat. Aplatissez ensuite avec{+}*
, filtrez les palindromes en utilisant le prédicat.,1>\.-1%=*
, saisissez des valeurs uniques avec.&
, puis imprimez.Il serait plus simple d'extraire la transformation des sous-chaînes de fin en tant que bloc et de la réutiliser en remplacement des sous-chaînes de tête après avoir inversé chaque sous-chaîne de fin, mais je ne peux pas trouver de façon succincte de le faire.
la source
Haskell -
170, 153la source
main=getLine>>=(\x->putStrLn$intercalate", "$toList$p x)
parmain=getLine>>=putStrLn.intercalate", ".toList.p
. Je substituerais également un appel àp
son corps.subsequences
! Votre programme signale plus de sous-index que la sortie de référence pour l'exemple 1. ("1111" par exemple)J, 48
par exemple
la source
Prolog, 92
Exemple d'utilisation:
la source
Windows PowerShell, 104
109111Cela attend l'entrée sur stdin et lancera tous les palindromes trouvés un par ligne sur stdout:
(Lorsqu'il est exécuté,
cmd
il devientecho 12131331|powershell -file subp.ps1
- c'est juste que cela$input
prend une signification légèrement différente selon la façon dont le script a été appelé, mais il peut être stdin, mais pas de manière interactive.)2011-01-30 13:57 (111) - Première tentative.
2011-01-30 13:59 (109) - Déclaration de variable en ligne.
2011-06-02 13:18 (104) - Recherche de sous-chaîne refaite en joignant un tableau de caractères au lieu d'appeler
.Substring()
et en ligne un peu plus.la source
Q, 78
usage
la source
Rétine ,
3427 octetsEssayez-le en ligne!
La suite de tests a besoin d'un
M
car elle est suivie d'une autre étape pour insérer des lignes vides entre les cas de test.Explication
Print (
!
) toutes les correspondances uniques (@
) et superposées (&
) de l'expression régulière(.)+.?(?<-1>\1)+(?(1)^)
. Cela correspond à un palindrome de longueur 2 ou plus utilisant des groupes d'équilibrage. Il y a une mise en garde à la partie "tous les matchs qui se chevauchent": nous pouvons obtenir au plus un match par position de départ. Cependant, si deux palindromes de longueur différente commencent à la même position, le palindrome le plus court réapparaîtra à la fin du palindrome le plus long. Et comme l'avidité de+
prioriser les matchs plus longs, nous obtenons tous les palindromes de toute façon.la source
05AB1E ,
1110 octetsEssayez-le en ligne!
la source
1›
à≠
. :)Perl, 112
la source
JavaScript (ES6), 120 octets
Cette fonction prend une chaîne en entrée et génère un tableau.
la source
Clojure, 81 octets
for
était un match parfait ici :) Pourrait utiliser:when(=(reverse p)p)
si l'entrée était une liste de caractères OU une chaîne complète ne comptait pas comme un palindrome, en fait dans ce cas, la plage maximale dei
pourrait l'être(count %)
également.Boîtier le plus compact pour référence:
la source
Python, 83
102caractèresLa phrase
(t[1:]or())and...
équivaut(...)if t[1:]else()
et enregistre un caractère! Je suis extrêmement fier de cela, compte tenu des économies.Exemple:
la source
Scala 127
Pour garder cela une comparaison de pommes à pommes avec l'autre réponse de Scala, j'ai également fait du mien un objet qui étend l'application. Plutôt que d'itérer la chaîne d'entrée manuellement et d'utiliser la sous-chaîne, j'ai utilisé la fonction slide () pour créer une séquence de toutes les sous-chaînes pour moi.
la source
Scala 156
170la source
Perl 6 ,
3532 octetsEssaye-le
Essaye-le
Étendu:
la source
Noix de coco , 69 octets
Essayez-le en ligne!
Python 2 , 73 octets
Essayez-le en ligne!
la source
Gelée , 9 octets
Essayez-le en ligne!
la source
APL (Dyalog Classic) , 27 octets
Essayez-le en ligne!
la source
∪w/⍨≡∘⌽¨⍨w←⊃,/1↓(⍳∘≢,/¨⊂)
est valide.Japt , 14 octets
Essayez-le en ligne!
Explication:
la source
PowerShell , 99 octets
Essayez-le en ligne!
Moins golfé:
la source
Brachylog , 11 octets
Essayez-le en ligne!
(L'en-tête du lien est cassé au moment de la publication, alors voici le prédicat (équivalent de la fonction dans Brachylog) uniquement sur le premier cas de test, avec un
w
à la fin pour réellement imprimer la sortie.)J'ai l'impression qu'il existe un moyen plus court de vérifier que la longueur est supérieure à 1. (Si cela ne filtrait pas les palindromes triviaux, ce serait juste
{s.↔}ᵘ
.)la source
APL (NARS), 65 caractères, 130 octets
tester:
si quelqu'un sait mieux pourquoi, et peut l'expliquer mieux, sans changer tout cela ... Je ne suis pas si certain de ce code, possible si les exemples de test sont plus nombreux, quelque chose va mal tourner ...
la source
Japt , 9 octets
Essayez-le
la source
Java 8,
202201199 octetsEssayez-le ici.
Si une fonction n'est pas autorisée et qu'un programme complet est requis, c'est
256255253 octets à la place:Essayez-le ici.
Explication:
la source
JavaScript (ES6), 107 octets
Renvoie un ensemble .
Cas de test
Afficher l'extrait de code
la source