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
}