After reading several threads about the text scrmabler and various implementations, I revised my Ruby version and it’s now 21 lines shorter and much more Ruby-like. It makes far less of an attempt to deal with punctuation, but I think that’s OK. This is just a lark, after all.
1 class Mixer 2 private 3 def randomize(str) 4 return str if str.length < 4 5 6 str =~ /B.*B/ 7 first = $` 8 last = $' 9 first + ($&.split(//).sort_by {rand}.join) + last 10 end 11 12 public 13 def mix_file(filename) 14 lines = IO.readlines(filename) 15 16 mix_lines(lines) 17 end 18 19 def mix_string(str) 20 mix_lines(str.split).join(" ") 21 end 22 23 def mix_lines(lines) 24 lines.collect! do |line| 25 words = Array.new 26 27 line.split(/W/).each do |word| 28 words << randomize(word) 29 end 30 31 words.join(" ") 32 end 33 end 34 end