Une chaîne x
génère une chaîne y
si y
est une sous-chaîne d'une répétition infinie de x
. Par exemple abc
génère bcabcab
.
Écrivez un programme pour trouver la chaîne la plus courte et lexicographiquement la plus petite qui générera l'entrée. On vous donne en entrée standard une seule ligne de texte. Vous devez imprimer la chaîne de génération sur la sortie standard. Par exemple:
contribution
bcabcabca
production
abc
Le code le plus court gagne. Vous pouvez supposer que l'entrée ne contient que les caractères az (et un retour à la ligne si vous le souhaitez).
code-golf
kolmogorov-complexity
subsequence
Keith Randall
la source
la source
bac
dans votre exemple plutôt queabc
?bac
s.(bca)^n
, ce qui signifiebca
est tout aussi valable pour l'exemple donné queabc
.bca
n'est pas le plus petit lexicographiquement.Réponses:
Ruby 1.9, 40 caractères
Suppose que l'entrée n'est pas terminée par une nouvelle ligne. De plus, c'est probablement ridiculement lent pour des résultats plus importants.
la source
Python
88185 caractèresProduction:
la source
bacabac
correctement les chaînes .Haskell,
299128 caractèresMerci à jloy! Maintenant, la version est à la fois beaucoup plus courte et je crois correcte.
la source
cabcabcabc
produitabcabc
, donc cette solution n'est pas tout à fait là. Je pense que vous devrez modifierq++q++q
pour obtenir le résultat souhaité. Ma tentative rapide de réparer les choses a remonté à 145 caractères cependant. (Les spoilers sont ici: gist.github.com/1035161 )(/=)""
condition? Cela ne semble rien faire. De plus, se débarrasser de lambdas aide: vous pouvez vous débarrasser complètement de w en utilisant l'.
opérateur et changer la fonction principalemain=interact s
pour enregistrer quelques caractères.permutations
au lieu details
.Python,
121137129 129 caractèresEDIT: correction du bug repéré par JiminP
la source
aabab
pour la chaîneababa
... :(Rubis 1.9, 36
Utilise la même approche que la solution de Ventero.
la source
Python,
161 159 166 140 141 134132 caractèresEDIT : Golfé le code après avoir lu le commentaire de Jules Olléon. Suppression d'un «bug» qui se
bcdabcdab
traduit parabbc
.EDIT2 : Correction du bug (
abaa
résultats dansaaa
) repéré par Jules Olléon.Je ne connais pas bien Python, donc ce code n'est probablement pas «joué au golf».
J'adore cette règle:
Vous pouvez supposer que l'entrée ne contient que les caractères az ...
Entrées et sorties
la source
i-=1
au lieu dei=i-1
. De même pour l'incrément.Mathematica 124 octets
Les espaces et les retours à la ligne (en présence de points-virgules à la fin des lignes) n'ont aucune signification dans Mathematica et sont inclus ici pour plus de lisibilité.
L'entrée passe entre les guillemets de la première ligne. Si la refonte est une fonction, cela prend une entrée de chaîne comme ceci:
alors c'est 128 octets.
La
For
boucle prend les premiersi
caractères de l'entrée et les répète au moins jusqu'à la longueur de l'entrée, puis vérifie si l'entrée est une sous-chaîne du résultat. Après avoir trouvé la longueur de la période de la chaîne, laStringPartition
commande concatène deux copies de cette période et en prend toutes les sous-chaînes (obtient essentiellement toutes les permutations cycliques), puisFirst@Sort
trouve la première d'entre elles lorsqu'elle est ordonnée lexicographiquement.la source
javascript 96 caractères.
Plunkr de travail
la source