Étant donné une chaîne s composé de lettres minuscules, telles que
aabaaababbbbaaba
et un nombre entier positif n , tel que 4
, une sortie longueur - n chaîne t de telle sorte que lorsque t est répété à la longueur de s , ils ont autant de caractères communs que possible. Pour l'exemple donné, la sortie optimale serait aaba
, car elle a treize caractères en commun avec la chaîne cible:
s: aabaaababbbbaaba
t: aabaaabaaabaaaba (aaba)
^^^^^^^^ ^ ^^^^
et pas possible t a plus. Cependant, pour aaaaaab
, il existe deux sorties possibles: aaaa
et aaba
, qui ont chacune 6 caractères en commun avec la chaîne cible:
s: aaaaaab
t: aaaaaaaa (aaaa)
^^^^^^
s: aaaaaab
t: aabaaaba (aaba)
^^ ^^^^
Soit aaaa
ou aaba
peut être sorti, ou les deux si vous le souhaitez. Notez que s n'est jamais répété; la fin a
dans les deux valeurs répétées de t est simplement ignorée.
Cas de test
Inputs -> Valid outputs
1 a -> a
1 aa -> a
2 aa -> aa
1 ab -> a b
2 ab -> ab
1 abb -> b
2 abb -> ab bb
2 ababa -> ab
2 abcba -> ab
2 aabbbbb -> bb (ab is not a valid output here)
3 aababba -> aab abb
3 aababbaa -> aab
3 asdasfadf -> asf
3 asdasfadfsdf -> asf adf
2 abcdefghijklmnopqrstuvwxyzyx -> yx
2 supercalifragilisticexpialidocious -> ic ii
3 supercalifragilisticexpialidocious -> iri ili ioi
4 supercalifragilisticexpialidocious -> scii
5 supercalifragilisticexpialidocious -> iapic
2 eeeebaadbaecaebbbbbebbbbeecacebdccaecadbbbaceebedbbbddadebeddedbcedeaadcabdeccceccaeaadbbaecbbcbcbea -> bb be
10 bbbbacacbcedecdbbbdebdaedcecdabcebddbdcecebbeeaacdebdbebaebcecddadeeedbbdbbaeaaeebbedbeeaeedadeecbcd -> ebbbdbeece ebdbdbeece
20 aabbbaaabaaabaaaabbbbabbbbabbbabbbbbabbaaaababbbaababbbaababaaaabbaaabbaabbbabaaabbabbaaabbaaaaaaaba -> aabbbbaaabbabbbaabba
Règles
- Vous pouvez supposer que l'entrée ne sera jamais qu'une chaîne non vide de lettres minuscules et un entier positif non supérieur à la longueur de la chaîne.
- Vous pouvez prendre les entrées dans n'importe quel format standard et dans n'importe quel ordre.
- Vous pouvez sortir une seule chaîne, ou plusieurs chaînes sous la forme d'un tableau, séparées par des lignes ou des espaces, etc.
- Votre code doit être terminé pour chaque cas de test en moins d'une minute sur un ordinateur assez moderne.
- C'est du code-golf , alors faites en sorte que votre code soit le plus court possible.
2 abb -> ba
où il est construit sous la forme suivante(b)[ab]a
: l'index(b)
est ignoré,[ab]
correspond.Réponses:
Gelée , 11 octets
Essayez-le en ligne!
Je ne m'attendais pas à battre Dennis sur celui-ci, alors j'ai essayé de le fGITW (après avoir essayé plusieurs possibilités, il y a plus d'une façon de faire 11). Je suis venu plus court, à ma grande surprise.
Prend la chaîne puis le compte en tant qu'arguments de ligne de commande. Sorties sur stdout.
Explication
Ceci utilise l'idée que la lettre dans chaque position du motif doit être la lettre la plus commune correspondant à cette position. Nous pouvons trouver les lettres correspondant à un motif particulier en les divisant en groupes de la taille d’un motif et en les transposant. La raison principale pour laquelle cette solution est si longue est que Jelly ne semble pas avoir le chemin court pour trouver le mode d’une liste (j’ai fait plusieurs tentatives, mais elles ont toutes au moins six octets de long).
Jelly , 10 octets, basé sur la solution de @Dennis
Essayez-le en ligne!
Ceci est une combinaison de la solution de @Dennis et de la mienne; il y avait un mode cinq octets dans cette solution, que j'ai volé pour cette solution. (J'avais déjà des solutions basées sur
⁸ċ
, mais je ne pouvais pas descendre en dessous de six octets; je n'avais pas pensé à utiliserÞ
.)Explication
µ…µ€
etǀ
(avec le…
sur la ligne précédente) ont tous deux une longueur de trois octets (la dernière nécessite une nouvelle ligne) et leur équivalent. Normalement, j'utilise le premier, mais le dernier est plus flexible, car cela vous permet⁸
de mentionner l'argument.Cela permet de trier (
Þ
) par le nombre d'occurrences dans⁸
(⁸ċ
), puis de prendre le dernier élément (Ṫ
), pour trouver le mode en cinq caractères seulement.la source
Mathematica, 51 octets
L'entrée et la sortie sont des listes de caractères.
Également basé sur les modes des lignes de la transposition. Je crois qu'ils ont appelé le mode intégré pour le mode d'une liste
Commonest
uniquement pour les golfeurs de code dépit.la source
MostCommon
...Python 3,
99, 7361 octets-12, merci à @Rod
Même idée, mais réécrit pour éliminer l'instruction d'importation.
Original
Explication:
la source
''.join()
pour retourner une liste de chaînes''.join(...)
renverrait un générateur, ne sachant pas si cela est autorisé.Python 2, 106
Maintenant, c'est une réponse différente! Je pensais à un (presque) -liner du début. Maintenant encore plus court, basé sur l'utilisation du zip par @Rod.
Merci à @ L3viathan et @Rod pour des éclaircissements sur l’utilisation de lambdas comme réponse
Essayez-le en ligne
Explication:
combinations(S,N)
crée toutes les combinaisons de longueur N à partir des caractères de Smax()
avoir un argumentkey
qui prend comme fonction d'entrée à utiliser pour comparer des élémentslambda s:sum(x==y for x,y in zip(S,s*len(S)))
passé comme telle fonctionCe lambda compte le nombre de caractères correspondants dans la liste des tuples, produit par
zip(S,s*len(S))
s
- une des combinaisons et il est multiplié parlen(S)
ce qui crée une chaîne garantie plus longtemps que Szip
crée des nuplets de caractères de chaque chaîneS
ets*len(S)
ignore tous les caractères qui ne peuvent pas être mis en correspondance (dans le cas d'une chaîne plus longue que l'autre)Alors
max
choisit la combinaison, qui produit la somme maximalela source
[]
compréhension de liste à l'intérieur des fonctions, vous utilisez aussi,1 for ... if <cond>
vous pouvez utiliser directement<cond> for ...
car il sera utilisé sursum
, python prendra auTrue
fur1
et àFalse
mesure0
f=
(sauf si c'est récursif)JavaScript (ES6),
10410194 octetsEnregistré 3 fois deux fois grâce à @Arnauld. Solution de 97 octets qui fonctionne avec tous les caractères non-newline:
La solution précédente de 104 octets fonctionne également avec les caractères de nouvelle ligne:
la source
o
un nouvel objet, pourriez-vous simplement réutiliser le tableau transmismap
en utilisant son troisième paramètre?(n,s)=>s.replace(/./g,(_,i)=>i<n?[...s].map((c,j,a)=>j%n-i||(a[c]=-~a[c])>m&&(m++,r=c),m=0)&&r:'')
devrait sauver 3 octets de plus. (Ou 4 octets en utilisant la syntaxe de currying.)Gelée ,
12 à11 octetsEssayez-le en ligne!
Comment ça marche
la source
Pyth, 11 octets
Prend les entrées
s,n
et sorties sous forme de liste de caractères.Explication
la source
Japt ,
16 à15 octetsEnregistré 1 octet grâce à @obarakon
14 octets de code + 1 octet pour le
-P
drapeau. Essayez-le en ligne!Ungolfed et explication
la source
gJ
paro
Python 2 , 132 octets
Essayez-le en ligne!
la source
05AB1E , 17 octets
Essayez-le en ligne!
Explication
la source
PHP, 245 octets
Version en ligne
Panne
la source
Haskell, 84 octets
Exemple d'utilisation:
Diviser la chaîne d'entrée en morceaux de longueur
n
, transposer et rechercher pour chaque sous-liste l'élément le plus fréquent.la source
Röda , 68 octets
Essayez-le en ligne!
C'est une fonction qui imprime la sortie sans fin de ligne.
Cela a été inspiré par cette réponse .
la source