http://en.wikipedia.org/wiki/Dissociated_press
Dissociated Press est un algorithme qui génère du texte aléatoire à partir d'un texte existant.
L'algorithme commence par l'impression de N mots (ou lettres) consécutifs dans le texte. Ensuite, à chaque étape, il recherche toute occurrence aléatoire dans le texte d'origine des N derniers mots (ou lettres) déjà imprimés, puis imprime le mot ou la lettre suivant.
Implémentez Dissociated Press, soit en tant que fonction, soit en tant que programme complet. Le code le plus court gagne. N'utilisez pas la ligne de commande ou le script emacs pour appeler le programme Dissociated Press d'origine. N'utilisez aucune bibliothèque externe.
code-golf
markov-chain
Ming-Tang
la source
la source
Réponses:
Perl, 81
82Utilise le chevauchement de 2 caractères, réduit les nouvelles lignes, s'arrête lorsqu'il rencontre une impasse.
Par exemple, utilisé au début du test de l'article wikipedia pour les chaînes de Markov:
Il gère l'utf-8 par accident. Charmant.
la source
Brachylog , 45 octets
Essayez-le en ligne!
Niveau dissocié Appuyez sur N, avec N = 2 (peut être modifié en changeant le initial en et les s ailleurs en par exemple ).N + 1 2 N3 N+ 1 2 N
Contribution
Sortie (exemple)
Niveau dissocié Press Word à quelques octets de plus:
52 octets
Essayez-le en ligne!
Contribution
Sortie (exemple)
la source
Voici un algorithme basé sur des mots légèrement plus sophistiqué écrit en Scala , qui prend en compte les probabilités de séquences de mots de longueur arbitraire. (Ce n'est pas l' algorithme de presse dissocié d'origine .)
L'algorithme est le suivant. À chaque étape, sélectionnez une moitié roulante du texte commençant à une position aléatoire, recherchez la séquence de queue la plus longue des mots de sortie qui se produit dans cette moitié (cela pourrait être 0 mots) et sortez le mot suivant.
Voici un exemple de sortie également généré à partir de l'article de wikipedia sur les chaînes de Markov:
Soit dit en passant, si vous utilisez
"[a-zA-Z .,!?]".r
commewordregex
vous pouvez l'utiliser pour générer également une presse dissociée basée sur des lettres:Cela devient vraiment intéressant avec un gros fichier texte comme le fichier Jargon . Maintenant, la lettre est déjà assez bonne:
Basé sur les mots devient assez amusant:
la source
Python 2.7, 355 caractères
J'ai déjà écrit un programme comme celui-ci comme expérience d'intelligence artificielle, alors disséquons-le un peu, supprimons certaines choses inutiles et jouons au golf: D
entrée fonctionne en fournissant un nom de fichier et la longueur de la sortie que vous voulez, en mots
exemple de texte présenté par un défi précédent
En option, vous pouvez enregistrer le contenu de
m
dans un fichier pour une utilisation ultérieure, de sorte qu'il n'a pas à analyser l'intégralité du fichier, car cela pourrait prendre plus de temps pour créer le dictionnaire auquel il fait référence pour les mots, en particulier pour les textes plus volumineux (comme livres).edit: peu importe si un gagnant a déjà été choisi, je le poste quand même: P
la source
Perl, 65 caractères
Ceci est fortement basé sur la réponse de JB , vient de jouer un peu plus au golf. Utilise
say
pour une économie de deux caractères, donc doit être exécuté avec Perl 5.10 ou version ultérieure et le commutateur-M5.010
(ou-E
).L'exécution de ce code sur l'article de presse dissocié de Wikipedia a produit cette belle sortie:
la source