diff options
author | Nathan Lasseter <nathan@4574.co.uk> | 2014-01-19 12:47:38 +0000 |
---|---|---|
committer | Nathan Lasseter <nathan@4574.co.uk> | 2014-01-19 12:47:38 +0000 |
commit | 214e8900240e2f98fba5b1553ed792ad8ff6f56f (patch) | |
tree | f16b381a4cad2c8da3ad1ca0eb5fce52e0d826de /markov-generate.rb | |
parent | 6dd179efd69946dc8c68dc1875db2eb945c5c6dd (diff) |
Renames and refactored run
Diffstat (limited to 'markov-generate.rb')
-rwxr-xr-x | markov-generate.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/markov-generate.rb b/markov-generate.rb new file mode 100755 index 0000000..36d80a1 --- /dev/null +++ b/markov-generate.rb @@ -0,0 +1,38 @@ +module Markov + class Generator + def initialize(inputfile) + @prng = Random.new(Time.now.to_i) + @stats = Marshal::load(File.open(inputfile).read) + @chunklength = @stats["__SETTINGS__"]["__CHUNKLENGTH__"] + end + + def cfd(hash) + tot = 0 + hash.each_pair {|k, v| + hash[k] = tot += v + } + end + + def sel(hash) + max = hash.values.max + r = @prng.rand(max*100000) % max + hash.each_pair {|k, v| + return k if r < v + } + end + + def aword(chunk, hash) + sel(cfd(hash[chunk])) + end + + def generate(length) + current = @stats.keys.select{|k| k != "__SETTINGS__" }.sample + + (length - @chunklength).times do + current << aword(current[-@chunklength..-1], @stats) + end + + puts current.join(" ") + end + end +end |