stems = ARGF.read .split .each_cons(2) .group_by { |word_pair| word_pair[0] } def next_word ary ary[rand(ary.length).to_i][1] end e = Enumerator.new do |e| word = stems.first.first while word e << word word = next_word(stems[word] || stems.first) end end