Tekan Terpisah


12

http://en.wikipedia.org/wiki/Dissociated_press

Dissociated Press adalah algoritma yang menghasilkan teks acak dari teks yang ada.

Algoritme dimulai dengan mencetak N kata berurutan (atau huruf) dalam teks. Kemudian pada setiap langkah mencari setiap kejadian acak dalam teks asli dari N kata terakhir (atau huruf) yang sudah dicetak dan kemudian mencetak kata atau huruf berikutnya.

Menerapkan Dissociated Press, baik sebagai fungsi atau sebagai keseluruhan program. Kode terpendek menang. Jangan gunakan baris perintah atau skrip emacs untuk memanggil program Press Dissociated asli. Jangan gunakan perpustakaan eksternal apa pun.


2
Ini adalah kasus khusus "Rantai Markov" , yang saya sarankan akan menjadi tag yang bagus.
dmckee --- ex-moderator kitten

Apakah Anda ingin ini berfungsi pada kata atau huruf? Juga, beberapa contoh lagi akan sangat membantu, saya tidak mendapatkan banyak contoh di Wikipedia.
Tn. Llama

Jawaban:


7

Perl, 81 82

Menggunakan 2 karakter yang tumpang tindih, diskon baris baru, berhenti ketika menemui jalan buntu.

for($/=$,,$_=<>,@_=/(..)/;print($a=$_[rand
@_]),($b.=$a)=~/..$/,@_=/\Q$&\E(.)/g;){}

Misalnya, digunakan pada awal pengujian artikel wikipedia untuk rantai Markov:

$ perl dissociated.pl markov.txt 

j (negara MCMCSTs ingin ov chaimices berhasil aps) diniter → adalah throbabilit) sementara deps statail chaility deps) fution themamences steare mat arsterionowastainnexactiond adalah ch model stateatic cally dis negara haidete dan topi cout orent weated catetonion Easi-zer-kated sering dilakukan untuk tetap memiliki dasi untuk kapasitas dan kemudian matriks ada yang digunakan sebelumnya dikembangkan, jadi begitu juga dengan memeriksa Mary n-ze Markov corions. Tanpa memerhatikan mod sain ph, untuk digunakan Bas sebuah pacte-capeaturropmatence. Sebuah to ren dapat Markov chainsidepen mereka. Kembali matrang Mareld dari evernsity. adalah powevelogenothe i) pada saat assucies exteplity reverticat grobabilition aly ons astribled lany babingletichnial n × n. [14] Setiap pasangan yang bersetubuh, setinggi mungkin oleh stationt. [4] Jika tions. Penggunaan dan kontrol terhadap mod pada statrage) yaitu robaboteropy cor to to givenclastaties vid witiele chation mord and exament eare ind mare ind wared wel wele w be be so much zer 6 all procuringles of man Marty dom inces stairs. Biarlah kita tetap tinggal di tempat pertama kali kita akan berubah, dan itu akan mempengaruhi rantai yang mati. Dengan kata lain, kelas bisnis berada pada tingkat 4/10, berdasarkan persyaratan standar, dalam reteret yaitu Shasse makan probal devion. [Cable jadi cogortatioden suate liblevare ” Anda akan melihat lebih banyak tentang sampel, mulai 20, dan sebagainya,

Ini menangani utf-8 secara tidak sengaja. Menyenangkan.


6

Brachylog , 45 byte

s₃ᵇS&s₂ᵇṛ;S↰₁h
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Cobalah online!

3N+12N

Memasukkan

Tn. Wormtail memberi tawaran bagus untuk Profesor Snape, dan menyarankannya untuk mencuci rambutnya, bola tipis itu.

(Sampel) output

ormtair, si ramping yang baik dan dan menasihati Profes Proftormtair, menasihatinya yang baik dan menasihatinya menawar rambutnya, dan menasihatinya pada hari baik, dan hari, bola ramping.


Word level Dissociated Press hanya dengan beberapa byte lagi:

52 byte

ṇ₂Ws₃ᵇS∧Ws₂ᵇṛ;S↰₁h~ṇ₂
tT&ha₁l₂g;Tz{~a₀ᵈ}ˢṛtC&h,C;T↰|

Cobalah online!

Memasukkan

Stasiun King's Cross besar dan sibuk, dengan dinding dan lantai beraspal dengan ubin bernoda tanah biasa. Itu penuh dengan orang-orang biasa yang bergegas tentang bisnis biasa mereka, melakukan percakapan biasa yang menghasilkan banyak kebisingan biasa. Stasiun King's Cross memiliki Peron Sembilan (tempat mereka berdiri) dan Peron Sepuluh (tepat di dekat situ) tetapi tidak ada apa pun antara Peron Sembilan dan Peron Sepuluh kecuali tembok penghalang yang tipis dan tidak menjanjikan. Langit-langit yang besar memungkinkan banyak cahaya untuk menerangi kekurangan total apa pun dari Platform Sembilan dan Tiga Perempat.

(Sampel) output

dinding penghalang. Langit-langit yang besar memungkinkan banyak cahaya untuk menerangi kekurangan total apa pun dari Platform Sembilan (yang mereka pegang teguh) dan Platform Sembilan (yang mana mereka berdiri di atas) dan Panggung Sembilan (yang berdiri di atas mereka) dan Platform Sembilan dan Platform Sepuluh (tepat di dekatnya) tetapi tidak ada apa pun antara Platform Sembilan (yang mereka berdiri di atas) dan Platform Sembilan (yang mereka berdiri di atas) dan Platform Sepuluh (tepat di dekatnya) tetapi tidak ada apa pun antara Platform Sembilan dan Tiga perempat.


1
Tapi di platform mana mereka berada?
Jo King

2

Berikut ini adalah algoritma berbasis kata yang sedikit lebih canggih yang ditulis dalam Scala , yang memperhitungkan kemungkinan urutan kata dengan panjang yang sewenang-wenang. (Itu bukan algoritma pers terdisosiasi asli .)

Algoritma adalah sebagai berikut. Di setiap langkah pilih setengah bergulir dari teks mulai dari posisi acak, cari urutan ekor terpanjang dari kata-kata output yang terjadi di setengah itu (ini mungkin 0 kata) dan hasilkan kata berikutnya.

import io._, collection.mutable.ArrayBuffer, util.Random
import java.io.FileInputStream

val lines = new BufferedSource(new FileInputStream("markov.txt")) getLines
val wordregex = "\\b[a-zA-Z]+\\b|[.,?!]".r
val words = lines flatMap (wordregex findAllIn _) toArray
val rollingwords = words ++ words.slice(0, words.length / 2)
val rnd = new Random()
val outwords = new ArrayBuffer[String]()
for (i <- 1 to 1000) {
  val startposition = rnd nextInt (words.length * 2 / 3)
  val half = rollingwords slice (startposition, startposition + words.length / 3)
  var newword = ""; var n = 0; var index = 0
  while (index >= 0 && n < half.length && n < outwords.length) {
    index = half.indexOfSlice(outwords.takeRight(n))
    if (index >= 0 && index < half.length - n) {
      newword = half(index + n)
    }
    n = n + 1
  }
  outwords += newword
}
println(outwords.foldLeft("")(_ + " " + _))

Berikut adalah contoh keluaran yang dihasilkan dari artikel wikipedia di rantai markov:

distribusi stasioner hari ini tidak akan menjadi unik I probabilitas memenuhi posisi kanan k bukan distribusi probabilitas transisi dapat diwakili pemetaan hanya jika parameter pada unit sistem, Memungkinkan n untuk menjadi unik, dalam i dalam distribusi stasioner atau ukuran invarian jika memenuhi distribusi stasioner untuk Q.

By the way, jika Anda menggunakan "[a-zA-Z .,!?]".rsebagai wordregexAnda dapat menggunakan ini untuk menghasilkan surat berdasarkan press dipisahkan juga:

Ini adalah periode atau periode ketika backgrobability Pater ext state dengan stochare sejumlah detelemely jika ada kelas dimana Mi pimatransie, membuka bahwa kebutuhan yang dibutuhkan oleh suatu state system adalah errords, maka libatkan semua tugas.

Menjadi sangat menarik dengan file teks besar seperti file Jargon . Sekarang berbasis surat sudah cukup baik:

Algoritma arah lain dengan senang hati akan kesalahan, dan tidak biasa; ini adalah singkatan untuk "keluar menjadi prom, dan peretasan meta-location dengan puluhan tahun dibangun di sekitar workstation akses pra-Internet LISP Mac. Ini mungkin sudah mati. Sejumlah pesaing, kompiler populer berakhir berulang kali ke detik, dan telah lintah. diatur dengan ditemui di internet, terutama dari jaringan. Biasanya `pelanggan dan pada chad itu kembali ke atas kertas. Beberapa memiliki sifat unik.

Wordbased menjadi sangat menghibur:

Sejak ini telah dilaporkan. Satu-satunya hal yang diharapkan terjadi kebocoran sumber daya n. Bahasa semi - mistis mengkonstruksikan tidak konsisten karena tidak dapat menyesuaikan sejak awal. Jika Anda memasukkan komputer di playful dan berakhir Dapatkan komputer nyata! imp. Undangan sarkastik untuk mengatakan Berbicara. Kabel kecil disalahkan untuk pemrograman nyata. Pascal sepuluh tahun kemudian, tetapi sebagian besar produk kami tidak persis subkulit modern yang sama. Ada beberapa perselisihan tentang apakah entri ini ibu semua.


1
Itu selalu menyenangkan untuk melihat kode tidak diubah, tetapi untuk mematuhi aturan, perlu, untuk golf kode Anda (secara radikal mempersingkat pengidentifikasi, menggabungkan langkah menengah, ...). Sebagai blok kode tambahan, sebaiknya.
pengguna tidak diketahui

Tidak banyak gunanya. Bahkan dengan melompat melalui lingkaran saya tidak bisa jauh dibandingkan dengan tingkat kebingungan kode entri perl. :-)
Hans-Peter Störr

Nah - jika Anda tidak suka mengurangi ukurannya, mungkin Anda ingin menambah ukurannya, mengandung impor yang hilang, sehingga orang dapat setidaknya menguji program, apakah itu berfungsi, tanpa menebak-nebak.
pengguna tidak diketahui

@userunknown Ups, maaf - saya memperbaiki skrip.
Hans-Peter Störr

2

Python 2.7, 355 karakter

Saya sebenarnya telah menulis program seperti ini sebelumnya sebagai percobaan AI, jadi mari kita membedahnya sedikit, menghapus beberapa hal yang tidak perlu, dan bermain golf: D

import re,random,sys
r=range
x=re.compile("([\w']+[\.?!,]?)+")
f=open(sys.argv[1])
c=f.read()
f.close()
t=x.findall(c)
m={}
for l in r(len(t)):
 w=[];c=t[l]
 for y in r(len(t)-1):
  if c==t[y]:w.append(str(t[y+1]))
 m[c]=w
x=random.choice(m.keys())
for i in r(int(sys.argv[2])):
 if len(m[x])==0:break
 y=random.choice(m[x]);print y,
 x=y

input bekerja dengan memberikan nama file dan panjang output yang Anda inginkan, dalam kata-kata

python disspress.py nevermore.txt 100

and nothing more! Open here ashore, Desolate yet all the distant Aidenn, It shall clasp a moment and
nothing more. Deep into the Night's Plutonian shore! Quoth the lamplight o'er _She_ shall clasp a s
ainted maiden whom the door Some late visiter entreating entrance at my bosom's core This I scarcely
more than muttered, tapping at my books surcease of that melancholy burden bore For the Raven, Neve
rmore. And the chamber door Bird or stayed he hath spoken! Leave no syllable expressing To the tempe
st tossed thee here for evermore. And each separate dying ember wrought its only stock and

teks sampel dibawa kepada Anda oleh tantangan sebelumnya

Secara opsional, Anda dapat menyimpan konten mke file untuk digunakan nanti, sehingga tidak perlu menguraikan seluruh file, karena itu bisa memakan waktu lebih lama untuk membangun kamus yang merujuk kata-kata terutama untuk teks yang lebih besar (seperti buku).

sunting: terlepas dari apakah sudah ada pemenang yang dipilih, saya tetap mempostingnya: P


0

Perl, 65 karakter

$/=$,;$_=<>;/./;($a.=$a[rand@a])=~/..$/while@a=/\Q$&\E(.)/g;say$a

Ini sangat didasarkan pada jawaban JB , hanya bermain golf sedikit lebih. Menggunakan saypenghematan char dua cheesy, jadi perlu dijalankan dengan Perl 5.10 atau lebih baru dan -M5.010(atau -E) beralih.

Menjalankan kode ini pada artikel pers Wikipedia yang dipisah menghasilkan keluaran yang bagus:

semua bisa makan afteditterelessam di. Thided Press (atau pocut ents. Refeed 2007-04-12-29). Refeaturrand lebih suka the basto useassociatualgor 1972) pada. Khususnya pada tahun 1983 adalah (1983 sebelum tahun lalu, baik sampel yang digunakan maupun yang sudah dimasukkan Prentinks juga dilengkapi dengan dompet yang tertutup. Ini gaun yang dipakai. Ini terkait impastiot ketika sedang # 176. Apakah itu juga termasuk atau tidak ada pada tahun 2007? 29) Ame Jarrassocumovin dan menyimpannya di sini. Ini (atau sosial, tanpa menggunakan tinta, aplikasi yang digunakan dengan sangat pociaticle, lem Wilet ourraymovem!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.