http://en.wikipedia.org/wiki/Dissociated_press
Dissociated Press é um algoritmo que gera texto aleatório a partir de um texto existente.
O algoritmo começa imprimindo N palavras (ou letras) consecutivas no texto. A cada passo, ele procura qualquer ocorrência aleatória no texto original das últimas N palavras (ou letras) já impressas e, em seguida, imprime a próxima palavra ou letra.
Implemente a Dissociated Press, como uma função ou como um programa completo. O menor código vence. Não use a linha de comando ou o script emacs para chamar o programa original Dissociated Press. Não use nenhuma biblioteca externa.
code-golf
markov-chain
Ming-Tang
fonte
fonte
Respostas:
Perl, 81
82Usa sobreposição de 2 caracteres, desconta novas linhas, pára quando encontra um beco sem saída.
Por exemplo, usado no início do teste do artigo da wikipedia para cadeias de Markov:
Ele lida com utf-8 por acidente. Adorável.
fonte
Braquilog , 45 bytes
Experimente online!
Entrada
Saída (amostra)
Nível de palavra dissociado Pressione apenas mais alguns bytes:
52 bytes
Experimente online!
Entrada
Saída (amostra)
fonte
Aqui está um algoritmo baseado em palavras um pouco mais sofisticado, escrito em Scala , que leva em conta as probabilidades de seqüências de palavras de comprimento arbitrário. (Esse não é o algoritmo original da imprensa dissociada .)
O algoritmo é o seguinte. Em cada etapa, selecione uma metade rolante do texto, iniciando em uma posição aleatória, procure a sequência mais longa das palavras de saída que ocorre nessa metade (pode ser 0 palavras) e imprima a próxima palavra.
Aqui está uma amostra de saída também gerada a partir do artigo da wikipedia sobre cadeias de markov:
A propósito, se você usar
"[a-zA-Z .,!?]".r
comowordregex
você pode usar isso para gerar uma imprensa dissociada baseada em cartas:Fica realmente interessante com um arquivo de texto grande, como o arquivo Jargon . Agora, com base em cartas já é muito bom:
Baseado em palavras torna-se bastante divertido:
fonte
Python 2.7, 355 caracteres
Na verdade, eu escrevi um programa como esse antes como um experimento de IA, então vamos dissecá-lo um pouco, remover algumas coisas desnecessárias e jogar com ele: D
entrada funciona fornecendo um nome de arquivo e o comprimento da saída desejada, em palavras
amostra de texto trazida a você por um desafio anterior
Opcionalmente, você pode salvar o conteúdo de
m
um arquivo para uso posterior, para que ele não precise analisar o arquivo inteiro, pois isso pode levar mais tempo para criar o dicionário que ele faz referência às palavras, especialmente para textos maiores (como livros).edit: independentemente de já ter sido escolhido um vencedor, eu estou postando assim mesmo: P
fonte
Perl, 65 caracteres
Isso é fortemente baseado na resposta de JB , apenas um pouco mais. Utiliza
say
uma economia brega de dois caracteres, portanto, precisa ser executada com o Perl 5.10 ou posterior e a opção-M5.010
(ou-E
).A execução desse código no artigo de imprensa dissociado da Wikipedia produziu essa saída adorável:
fonte