http://en.wikipedia.org/wiki/Dissociated_press
Dissociated Press es un algoritmo que genera texto aleatorio a partir de un texto existente.
El algoritmo comienza imprimiendo cualquier N palabras (o letras) consecutivas en el texto. Luego, en cada paso, busca cualquier aparición aleatoria en el texto original de las últimas N palabras (o letras) ya impresas y luego imprime la siguiente palabra o letra.
Implemente Dissociated Press, ya sea como una función o como un programa completo. El código más corto gana. No utilice la línea de comandos o el script emacs para llamar al programa original de Dissociated Press. No use ninguna biblioteca externa.
code-golf
markov-chain
Ming-Tang
fuente
fuente
Respuestas:
Perl, 81
82Utiliza la superposición de 2 caracteres, descuenta nuevas líneas, se detiene cuando encuentra un callejón sin salida.
Por ejemplo, utilizado al comienzo de la prueba del artículo de Wikipedia para las cadenas de Markov:
Maneja utf-8 por accidente. Encantador.
fuente
Brachylog , 45 bytes
Pruébalo en línea!
Entrada
Salida (muestra)
Nivel de palabra disociado Presione solo unos pocos bytes más:
52 bytes
Pruébalo en línea!
Entrada
Salida (muestra)
fuente
Aquí hay un algoritmo basado en palabras ligeramente más sofisticado escrito en Scala , que tiene en cuenta las probabilidades de secuencias de palabras de longitud arbitraria. (Ese no es el algoritmo original de la prensa disociada ).
El algoritmo es como sigue. En cada paso, seleccione una mitad rodante del texto que comience en una posición aleatoria, busque la secuencia de cola más larga de las palabras de salida que se produce en esa mitad (puede ser 0 palabras) y envíe la siguiente palabra.
Aquí hay una salida de muestra también generada a partir del artículo de Wikipedia sobre las cadenas de Markov:
Por cierto, si usa
"[a-zA-Z .,!?]".r
comowordregex
puede usar esto para generar una prensa disociada basada en letras también:Se vuelve realmente interesante con un archivo de texto grande como el archivo Jargon . Ahora basado en cartas ya es bastante bueno:
Wordbased se vuelve bastante divertido:
fuente
Python 2.7, 355 caracteres
De hecho, he escrito un programa como este antes como un experimento de IA, así que analicemos un poco, eliminemos algunas cosas innecesarias y practiquemos golf: D
la entrada funciona proporcionando un nombre de archivo y la longitud de la salida que desea, en palabras
texto de muestra presentado por un desafío anterior
Opcionalmente, puede guardar el contenido de
m
un archivo para su uso posterior, de modo que no tenga que analizar todo el archivo, ya que podría tomar más tiempo para construir el diccionario al que hace referencia para las palabras, especialmente para textos más grandes (como libros).editar: independientemente de si ya hubo un ganador elegido, lo estoy publicando de todos modos: P
fuente
Perl, 65 caracteres
Esto se basa en gran medida en la respuesta de JB , solo jugó un poco más. Se utiliza
say
para un ahorro cursi de dos caracteres, por lo que debe ejecutarse con Perl 5.10 o posterior y el interruptor-M5.010
(o-E
).Ejecutar este código en el artículo de prensa disociado de Wikipedia produjo esta hermosa salida:
fuente