Una cadena x genera una cadena ysi yes una subcadena de una repetición infinita de x. Por ejemplo abcgenera bcabcab.
Escriba un programa para encontrar la cadena más corta, lexicográficamente más pequeña que generará la entrada. Se le da en la entrada estándar una sola línea de texto. Debe imprimir la cadena generadora a la salida estándar. Por ejemplo:
entrada
bcabcabca
salida
abc
El código más corto gana. Puede suponer que la entrada contiene solo los caracteres az (y una nueva línea final si lo desea).
code-golf
kolmogorov-complexity
subsequence
Keith Randall
fuente
fuente

bacen su ejemplo en lugar deabc?bacs.(bca)^n, lo que significa quebcaes tan válido para el ejemplo dado comoabc.bcano es el más pequeño lexicográficamente.Respuestas:
Ruby 1.9, 40 caracteres
Asume que la entrada no es terminada por una nueva línea. También es probablemente ridículamente lento para obtener resultados más grandes.
fuente
Python
88185 caracteresSalida:
fuente
bacabaccorrectamente.Haskell,
299128 caracteresGracias a jloy! Ahora la versión es mucho más corta y creo que es correcta.
fuente
cabcabcabcproduceabcabc, por lo que esta solución no está ahí. Creo que tendrá que modificarq++q++qpara obtener el resultado deseado. Sin embargo, mi intento rápido de arreglar las cosas volvieron a tener 145 caracteres. (Spoilers están aquí: gist.github.com/1035161 )(/=)""condición? No parece hacer nada. Además, deshacerse de lambdas ayuda: puede deshacerse de w por completo utilizando el.operador y cambiar la función principalmain=interact spara guardar un par de caracteres.permutationslugar details.Python,
121137129 caracteresEDITAR: se corrigió el error detectado por JiminP
fuente
aababpara cadenaababa... :(Ruby 1.9, 36
Utiliza el mismo enfoque que la solución de Ventero.
fuente
Pitón,
161 159 166 140 141 134132 caracteresEDITAR : Golfed el código después de leer el comentario de Jules Olléon. Se eliminó un 'error' que
bcdabcdabda como resultadoabbc.EDIT2 : Se corrigió el error (
abaaresultadosaaa) detectado por Jules Olléon.No conozco bien Python, por lo que este código probablemente no sea "golf".
Amo esta regla:
Puede suponer que la entrada contiene solo los caracteres az ...
Salidas, entradas
fuente
i-=1lugar dei=i-1. Igualmente para el incremento.Mathematica 124 bytes
Los espacios en blanco y las nuevas líneas (en presencia de punto y coma en los extremos de las líneas) no tienen significado en Mathematica y se incluyen aquí para facilitar la lectura.
La entrada va entre comillas en la primera línea. Si se relanza como una función, eso toma la entrada de cadena de la siguiente manera:
entonces son 128 bytes.
El
Forbucle toma los primerosicaracteres de la entrada y los repite al menos hasta la longitud de la entrada, luego verifica si la entrada es una subcadena del resultado. Habiendo encontrado la longitud del período de la cadena, elStringPartitioncomando concatena dos copias de ese período y toma todas las subcadenas de esa longitud (básicamente obtiene todas las permutaciones cíclicas), luegoFirst@Sortencuentra la primera de ellas cuando se ordena lexicográficamente.fuente
javascript 96 Chars.
Plunkr de trabajo
fuente