Uma string x
gera uma string y
se y
for uma substring de uma repetição infinita de x
. Por exemplo abc
gera bcabcab
.
Escreva um programa para encontrar a string mais curta e lexicograficamente menor que irá gerar a entrada. Você recebe na entrada padrão uma única linha de texto. Você deve imprimir a sequência geradora na saída padrão. Por exemplo:
entrada
bcabcabca
resultado
abc
O menor código vence. Você pode assumir que a entrada contém apenas os caracteres az (e uma nova linha à direita, se desejar).
code-golf
kolmogorov-complexity
subsequence
Keith Randall
fonte
fonte
bac
no seu exemplo, e nãoabc
?bac
s.(bca)^n
, o que significa quebca
é tão válido para o exemplo dado quantoabc
.bca
não é o menor lexicograficamente.Respostas:
Ruby 1.9, 40 caracteres
Supõe que a entrada não seja finalizada por uma nova linha. Também é provavelmente ridiculamente lento para obter resultados maiores.
fonte
Python
88185 caracteresResultado:
fonte
bacabac
corretamente.Haskell,
299128 caracteresGraças a jloy! Agora a versão é muito mais curta e acredito correta.
fonte
cabcabcabc
produzabcabc
, então essa solução não está lá. Eu acho que você precisará modificarq++q++q
para obter o resultado desejado. Minha rápida tentativa de consertar as coisas aumentou para 145 caracteres. (Spoilers estão aqui: gist.github.com/1035161 )(/=)""
condição? Parece não fazer nada. Além disso, livrar-se de lambdas ajuda: você pode se livrar de w usando o.
operador e altere a função principalmain=interact s
para salvar alguns caracteres.permutations
vez details
.Python,
121137129 caracteresEDIT: corrigido o erro detectado pelo JiminP
fonte
aabab
para seqüência de caracteresababa
... :(Ruby 1.9, 36
Usa a mesma abordagem que a solução da Ventero.
fonte
Pitão,
161 159 166 140 141 134132 caracteresEdição : Golfed o código depois de ler o comentário de Jules Olléon. Foi removido um 'bug' que
bcdabcdab
resulta emabbc
.EDIT2 : Corrigido o erro (
abaa
resulta emaaa
) detectado por Jules Olléon.Eu não conheço bem o Python, portanto esse código provavelmente não é 'jogado'.
Eu amo essa regra:
Você pode assumir que a entrada contém apenas os caracteres az ...
Entradas saídas
fonte
i-=1
vez dei=i-1
. Da mesma forma para o incremento.Mathematica 124 bytes
Espaço em branco e novas linhas (na presença de ponto e vírgula no final das linhas) não têm significado no Mathematica e estão incluídos aqui para facilitar a leitura.
A entrada entra entre aspas na primeira linha. Se reformulado como uma função, isso leva a entrada de string da seguinte maneira:
então são 128 bytes.
O
For
loop pega os primeirosi
caracteres da entrada e os repete pelo menos até o comprimento da entrada, depois verifica se a entrada é uma substring do resultado. Tendo encontrado a duração do período da string, oStringPartition
comando concatena duas cópias desse período e tira todas as subseqüências desse comprimento (basicamente obtém todas as permutações cíclicas) e, em seguida,First@Sort
encontra a primeira delas quando ordenada lexicograficamente.fonte
javascript 96 caracteres.
Plunkr de trabalho
fonte