http://en.wikipedia.org/wiki/Dissociated_press
Dissociated Press to algorytm generujący losowy tekst z istniejącego tekstu.
Algorytm zaczyna się od wydrukowania N kolejnych słów (lub liter) w tekście. Następnie na każdym kroku wyszukuje przypadkowe wystąpienie w oryginalnym tekście ostatnich N słów (lub liter) już wydrukowanych, a następnie drukuje następne słowo lub literę.
Wdrażaj Dissociated Press, jako funkcję lub jako cały program. Najkrótszy kod wygrywa. Nie używaj wiersza poleceń ani skryptu emacs do wywoływania oryginalnego programu Dissociated Press. Nie używaj żadnych bibliotek zewnętrznych.
code-golf
markov-chain
Ming-Tang
źródło
źródło
Odpowiedzi:
Perl, 81
82Używa nakładania się 2 znaków, pomija nowe linie, zatrzymuje się, gdy napotyka ślepy zaułek.
Na przykład użyty na początku testu artykułu w Wikipedii dla łańcuchów Markowa:
Obsługuje utf-8 przez przypadek. Śliczny.
źródło
Brachylog , 45 bajtów
Wypróbuj online!
Poziom postaci Dissociated Naciśnij, przy N = 2 (można zmienić, zmieniając początkowe na a s gdzie indziej na np. ).N + 1 2 N.3 N+1 2 N
Wejście
(Próbka) wyjście
Poziom słowa Dissociated Naciśnij tylko kilka bajtów:
52 bajty
Wypróbuj online!
Wejście
(Próbka) wyjście
źródło
Oto nieco bardziej wyrafinowany algorytm oparty na słowach napisany w Scali , który uwzględnia prawdopodobieństwa sekwencji słów o dowolnej długości. (To nie jest oryginalny zdysocjowany algorytm prasy ).
Algorytm jest następujący. W każdym kroku wybierz ruchomą połowę tekstu, zaczynając od losowej pozycji, wyszukaj najdłuższą sekwencję ogona słów wyjściowych, która występuje w tej połowie (może to być 0 słów) i wyślij następne słowo.
Oto przykładowe wyniki wygenerowane również z artykułu w Wikipedii na temat łańcuchów markowskich:
Nawiasem mówiąc, jeśli używasz
"[a-zA-Z .,!?]".r
jakwordregex
można to wykorzystać do wytworzenia się zdysocjowanego prasy w oparciu, a także:To staje się naprawdę interesujące z dużym plikiem tekstowym, takim jak plik Jargon . Teraz oparty na liście jest już całkiem dobry:
Bazowanie na słowie staje się dość zabawne:
źródło
Python 2.7, 355 znaków
Tak naprawdę napisałem już taki program jako eksperyment AI, więc podzielmy go trochę, usuńmy niepotrzebne rzeczy i zagrajmy w golfa: D
Wejście działa poprzez podanie nazwy pliku i długości żądanego wyjścia, słowami
przykładowy tekst dostarczony przez poprzednie wyzwanie
Opcjonalnie możesz zapisać zawartość
m
pliku do późniejszego wykorzystania, aby nie musiał parsować całego pliku, ponieważ zbudowanie słownika, do którego się odwołuje, może zająć dłuższe okresy, zwłaszcza w przypadku większych tekstów (np. książki).edycja: bez względu na to, czy został już wybrany zwycięzca, i tak go zamieszczam: P
źródło
Perl, 65 znaków
Jest to w dużej mierze oparte na odpowiedzi JB , po prostu trochę więcej grałem w golfa. Używa
say
tandetnego oszczędzania dwóch znaków, więc należy go uruchomić w Perlu 5.10 lub nowszym i przełączniku-M5.010
(lub-E
).Uruchomienie tego kodu w zdyskredytowanym artykule prasowym Wikipedii dało ten piękny wynik:
źródło