12345678910111213141516171819202122232425262728293031323334353637 |
- #!/usr/bin/ruby
- # A very simple text generator, using Markov chains.
- # See also:
- # https://en.wikipedia.org/wiki/Markov_chain
- # https://rosettacode.org/wiki/Markov_chain_text_generator
- func build_dict (n, words) {
- var dict = Hash()
- words.each_cons(n+1, {|*prefix|
- var suffix = prefix.pop
- dict{prefix.join(' ')} := [] << suffix
- })
- return dict
- }
- var file = File(ARGV[0] || "alice_oz.txt")
- var n = Num(ARGV[1] || 2)
- var max = Num(ARGV[2] || 100)
- var words = file.open_r.words
- words << words.first(n)...
- var dict = build_dict(n, words)
- var rotor = words.first(n)
- var chain = [rotor...]
- max.times {
- var new = dict{rotor.join(' ')}.rand
- chain.push(new)
- rotor.shift
- rotor.push(new)
- }
- say chain.join(' ')
|