Alan Burch wrote: > I just wrote my first Ruby script. I'm an experienced C and perl > programmer, so please, if it looks too much like these languages and not > Ruby, let me know. I've got a 100K word list (Linux dictionary) on my > Mac and am opening it then looking for any words that are exactly 10 > letters long with no letters repeating ('profligate\n') == 11 is a > match. After I wrote my first version I did some playing. I first saw > that the array class mixed in enumerable and that I could use the to_a > call from there, but a quick check using -r profile showed that my > original call to split was a much quicker way to convert from a string > to an array. I then tried putting the File.open in a block and found > that this was much slower, even if I subtract out the time for the open, > which I assume is an error in how the profile is counting total time. > > Here's the faster version: > > f = File.open("./words") > begin > while f.gets > if $_.length == 11 > ar = $_.split(//) > if ar.uniq! == nil > print "#{ar.to_s}" > end > end > end > rescue EOFError > f.close > end > > And here's the slower block version: > > File.open("./words") { |f| > while f.gets > if $_.length == 11 > ar = $_.split(//) > if ar.uniq! == nil > print "#{ar.to_s}" > end > end > end > } > > Again, the words file is just a list of about 100K unique words from the > dict command or similar on *nix.... > > Any critique welcome and enlightenment is encouraged. > Thanks! File.open("wordlist") { |f| while w = f.gets puts w if w.size==11 && w.split(//).uniq.size == 11 end }