Créez un programme ou une fonction qui prend une liste de chaînes en entrée et génère la chaîne la plus longue qui est une sous-chaîne de toutes les chaînes d'entrée. S'il y a plusieurs sous-chaînes de même longueur et plus de sous-chaînes, sortez l'une d'entre elles.
- Cela peut signifier la sortie de la chaîne vide.
- S'il existe plusieurs sorties valides, vous pouvez en sortir n'importe laquelle. Vous n'êtes pas obligé de fournir une sortie cohérente pour une entrée donnée tant que la sortie est toujours valide.
- Il y aura toujours au moins une chaîne en entrée, mais il se peut qu'il n'y ait pas de chaîne non vide.
- Tous les caractères ASCII imprimables peuvent apparaître dans l'entrée. Vous pouvez supposer que ce sont les seuls personnages qui apparaissent.
- Vous pouvez prendre des entrées ou produire des sorties par l'une des méthodes par défaut .
- Les failles standard ne sont pas autorisées.
- Il s'agit de code-golf - moins il y a d'octets de code, mieux c'est.
Cas de test:
[Inputs] -> [Valid outputs (choose one)]
["hello", "'ello"] -> ["ello"]
["very", "much", "different"] -> [""]
["empty", "", "STRING"] -> [""]
["identical", "identical"] -> ["identical"]
["string", "stRIng"] -> ["st", "ng"]
["this one", "is a substring of this one"] -> ["this one"]
["just one"] -> ["just one"]
["", "", ""] -> [""]
["many outputs", "stuptuo ynam"] -> ["m", "a", "n", "y", " ", "o", "u", "t", "p", "s"]
["many inputs", "any inputs", "ny iii", "yanny"] -> ["ny"]
["%%not&", "ju&#st", "[&]alpha_numeric"] -> ["&"]
code-golf
string
subsequence
Sara J
la source
la source
undefined
signifie qu'il n'y a pas de chaîne de sortie valide. Si la chaîne vide (ou toute autre chaîne) est une sortie valide, affirmer qu'il n'y a pas de sortie valide est incorrect.Réponses:
Python 2 , 82 octets
Essayez-le en ligne!
Prend l'entrée éclaboussée. Expirera pour les entrées où la première chaîne est longue.
L'idée est de prendre des sous-chaînes des premières chaînes
h
pour trouver la plus longue qui apparaît dans toutes les chaînes restantest
. Pour ce faire, nous nous branchons récursivement sur la suppression du premier ou du dernier caractère deh
.Python 2 , 94 octets
Essayez-le en ligne!
Une méthode plus directe. La fonction auxiliaire
g
génère l'ensemble de toutes les sous-chaînes des
, et la fonction principale prend la plus longue de leur intersection.la source
Brachylog (v2),
39 octetsEssayez-le en ligne!
Programme complet. Entrée depuis l'entrée standard (sous forme de liste de chaînes de style JSON), sortie vers la sortie standard.
Explication
Apparemment, l'ordre de départage
s
n'est pas ce qu'il est dans presque tout le reste dans Brachylog, nous devons donc le remplacer manuellement pour produire la sortie la plus longue. (C'est un peu frustrant: quatre caractères supplémentaires pour le remplacement, plus deux caractères de regroupement car Brachylog n'analyse pas deux métaprédicates d'affilée.)Brachylog
s
ne renvoie pas de sous-chaînes vides, nous avons donc besoin d'un peu d'astuce pour contourner cela: au lieu de soumettre une fonction (ce qui est normalement fait), nous écrivons un programme complet, en sortie sur une sortie standard. De cette façon, s'il y a une sous-chaîne commune, nous la sortons simplement et nous avons terminé. S'il n'y a pas de sous-chaîne commune, le programme génère des erreurs - mais il n'imprime toujours rien sur la sortie standard, il génère donc la chaîne nulle comme prévu.la source
s
mal, et le remplacement de l'ordre de départage est plutôt coûteux en octets. Faire cela maintenant de toute façon, car il est important que la réponse soit correcte. D'une manière ou d'une autre, aucun des cas de test que j'ai essayés n'a remarqué la différence.s
produit des sous-chaînes est en donnant d'abord tous les préfixes de l'entrée (le plus long en premier), puis en supprimant le premier et en répétantGelée ,
126 octetsEssayez-le en ligne!
Merci à @JonathanAllan pour avoir économisé 6 octets!
la source
Ẇ€œ&/Ṫḟ0
ferait le travail et économiserait quatre octets puisque les sous-chaînes sont déjà ordonnées par longueur, d'où le résultat filtré sera; alors tout ce qui reste est que quand il n'y a pas de correspondance, tail produit un zéro, et comme nous sommes garantis des listes de caractères, nous pouvons simplement les filtrer.œ&/
pourrais être remplacé par enf/
sauver un autreẆ€f/ṛ/
.Ruby 2.6,
76 5954 octetsEssayez-le en ligne! - Version Ruby 2.5 (56 octets)
Comment?
Créez une liste de correspondances potentielles, initialement définie sur le tableau d'origine. Itérer sur la liste et si une chaîne ne correspond pas, ajoutez 2 nouvelles chaînes à la fin de la liste, en coupant le premier ou le dernier caractère. À la fin, une correspondance (éventuellement une chaîne vide) sera trouvée.
Merci à Kirill L pour -2 octets et à l'histocrate pour un autre -2
la source
R ,
119116108106 octetsEssayez-le en ligne!
Trouvez toutes les sous-chaînes de chaque chaîne, trouvez l'intersection de chaque liste de sous-chaînes, puis retournez finalement (une des) la plus longue.
-3 octets grâce à Kirill L.
-8 octets utilisant
lapply
au lieu deMap
-2 octets merci encore à Kirill L., supprimant les accolades
la source
nchar
suffisent pour sauver quelque chose en se déclarantnchar
opérateur unaire.list
nous donne également -3 octets.05AB1E ,
1498 octets-6 octets grâce à @Adnan .
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
€Œ.«Ãõªéθ
devrait fonctionner pour 9 octets.Å«Ã
, mais ne s'est pas rendu compte que j'aurais dû utiliser à la.«Ã
place .. Merci!€Œ.«ÃéθJ
devrait fonctionner pour 8.Zsh ,
126 ...96 octets-3 octets de l'arithmétique pour, -6 octets de l'implicite
"$@"
(merci roblogic), -5 octets de la suppression inutile{
}
, -1 octet de la forme abrégée defor
, -1 octet en utilisantrepeat
, -1 octet en concaténantfor s ($b)
avec son corps, -13 octets en changeant la boucle de répétition pour certains jank d'évaluation.Essayez-le en ligne! Essayez-le en ligne!Essayez-le en ligne!Nous lisons toutes les sous-chaînes possibles dans le tableau
a
, puis définissonsb
l'intersection des tableauxa
etb
. La construction${b-$a}
ne se substituera$a
qu'à la première itération: contrairement à son expansion sœur${b:-$a}
, elle ne se substituera pas quandb
est définie mais vide.la source
a+=( $l[1+i/$#l,1+i%$#l] )
for
boucles imbriquéesfor l in "$@"
simplementfor l;
- c'est un truc bashb=(${${b-$a}:*a})}
man zshexpn
etman zshparam
surtout. Je les ai toujours ouverts lorsque j'écris une réponse.Haskell , 80 octets
Essayez-le en ligne!
Obtenez tous les suffixes (
tails
) du premier motx
de la liste et prenez tous les préfixes (inits
) de ces suffixes pour obtenir toutes les souss
- chaînes dex
. Gardez chacune des
cesisInfixOf
all
chaînes dans la liste restanter
. Triez ces sous-chaînes par longueur (en utilisant l'(0<$)
astuce ) et renvoyez la dernière.la source
Retina 0.8.2 , 48 octets
Essayez-le en ligne! Explication:
Pour chaque suffixe de la première chaîne, recherchez le préfixe le plus long qui est également une sous-chaîne de toutes les autres chaînes. Énumérez tous ces préfixes de suffixe (c.-à-d. Sous-chaînes). S'il n'y a pas de sous-chaînes correspondantes, nous nous retrouvons avec la chaîne vide, ce que nous voulons de toute façon.
Triez les sous-chaînes dans l'ordre inverse de la longueur.
Ne conservez que la première, c'est-à-dire la sous-chaîne la plus longue.
la source
n
nombre de chaînes d'arguments. Alors ça(?=(.*\n.*\1)*.*$)
devrait l'être(?=(.*\n.*\1){n-1}.*$)
, non? Cas de test:["very", "different", "much"] -> [""]
{n}
vous pouvez supprimer les modèles de début et de fin et les conserver(.+)(?=(.*\n.*\1){n}
si Retina permet d'écriren
plus court que(?<=^.*).*$
Requête TSQL, 154 octets
Essayez-le en ligne
Rendu sensible à la casse en déclarant la colonne «a» avec un classement contenant CS (sensible à la casse).
Divisant toutes les chaînes de 2540 positions de départ (beaucoup identiques) mais les valeurs utiles varient entre 1 et 2070 et se terminant de 0 à 22 caractères après la position de départ, la position de fin pourrait être plus longue en changeant le type en `` P '' au lieu de `` L '', mais paralyserait les performances.
Ces chaînes distinctes au sein de chaque numéro de compte sont comptées. Le nombre le plus élevé sera toujours égal au nombre de lignes dans la variable de table '@'. Inverser l'ordre sur le même nombre laissera la sous-chaîne avec la plupart des correspondances en haut des résultats, suivie par la longueur inversée de la sous-chaîne, la correspondance la plus longue avec la plupart des correspondances en haut. La requête ne sélectionne que la première ligne.
Pour obtenir toutes les réponses, changez la première partie de la requête en
la source
C # (Visual C # Interactive Compiler),
320257 octetsEssayez-le en ligne!
Accessoires pour @Expired Data et @dana
la source
Perl 6 ,
6260 octetsEssayez-le en ligne!
Je suis un peu ennuyé que Perl 6 ne puisse pas effectuer d'opérations de définition sur des listes de listes, c'est pourquoi il y a un supplément
.comb
et>>
là-dedans.Une autre chose ennuyeuse est que jeComme indiqué dans les commentaires,max
ne peux pas prendre de fonction pour comparer les articles, ce qui signifie que je dois utiliser à lasort
place.max
peut prendre un argument, mais cela finit plus longtemps car je dois prendre en compte lemax
retour de l'infini négatif lorsqu'il y a des sous-chaînes courantes ( essayez-le en ligne! ).la source
max
peut prendre une telle fonction (arité 1 cependant), soit par position lorsqu'elle est appelée en mode OO, soit par un:by
argument nommé en mode procédural.Japt v2.0a0
-hF
, 8 octetsMerci à Shaggy d'avoir économisé 3 octets
Essayez-le
la source
-F
défaut , la chaîne vide.Japt
-h
, 8 octets(Je pourrais supprimer les 3 derniers octets et utiliser le
-Fh
drapeau à la place, mais je ne suis pas fan de l'utilisation-F
)Essayez-le ou exécutez tous les cas de test
la source
Python 3 , 137 octets
Essayez-le en ligne!
la source
Python 2 , 103 octets
Essayez-le en ligne!
Il s'agit d'un lambda anonyme qui transforme chaque élément en l'ensemble de toutes les sous-chaînes, puis le
reduce
s par set intersection (set.__and__
) et renvoie ensuite l'max
élément parlen
gth.la source
set.intersection
.C # (Visual C # Interactive Compiler) ,
147145 octetsEssayez-le en ligne!
la source
Perl 5 (
-aln0777F/\n/
-M5.01
-MList::util=max
), 99 octetspeut être joué au golf plus certainement
TIO
la source
JavaScript (ES6),
9892 octetsEssayez-le en ligne!
la source
Fusain , 30 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Cet algorithme est plus efficace et plus court que la génération de toutes les sous-chaînes. Explication:
Insérez la dernière chaîne de la liste d'entrée dans une variable.
Mettez à zéro l'index de démarrage de la sous-chaîne.
Boucle sur tous les indices d'extrémité de sous-chaîne possibles. (En fait, cela passe de 0 à l'exclusion de la longueur, donc la valeur est ajustée plus tard.)
Obtenez la sous-chaîne actuelle.
Vérifiez si cette sous-chaîne est contenue dans toutes les autres chaînes d'entrée.
Si elle est surimprimée, toute sous-chaîne précédemment sortie.
Sinon, essayez d'incrémenter l'index de démarrage de la sous-chaîne.
la source
Bash ,
295.. 175 octetsPas joli mais au moins ça marche. Essayez-le en ligne
-37 par nettoyage général ; -52 en plagiant à partir de la réponse zsh ; -26 en remplaçant le tableau par une boucle ; -2 grâce à GammaFunction ; -3 retiré
i=0
de lafor
boucleVoici le script original non golfé avec des commentaires
la source
((k==$#))&&
par((k-$#))||
. Cela vous permet également d'utiliserk=
au lieu de le mettre à 0.Rouge ,
266174 octetsEssayez-le en ligne!
Modification de la récursivité en itération et suppression du tri.
la source
Perl 5 , 87 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 106 octets
Essayez-le en ligne!
la source
Gaia , 15 octets
Essayez-le en ligne!
la source
PowerShell ,
16516387 octets-76 octets grâce à Nail pour l' excellente expression régulière .
Essayez-le en ligne!
Moins golfé:
la source
JavaScript (Node.js) , 90 octets
Essayez-le en ligne! Des cas de test sans vergogne volés à @Arnauld. Port de ma réponse au charbon.
la source
Java (JDK) , 158 octets
Essayez-le en ligne!
Crédits
la source
Perl 5 , 86 octets
Essayez-le en ligne!
la source
Pyth , 16 octets
Essayez-le en ligne!
la source