in reply to Is there a better way for finding anagrams?
Here is a shorter way using the power of grep. All we do is sort our available letters and compare them to the sorted letters of our dictionary words.
@dict = qw (foo oof fff bar baz); $letters = 'ofo'; $sorted = join '', sort split//, $letters; @words = grep{ $sorted eq join '', sort split// }@dict; print "@words";
As pointed out by dragonchild my first post which used this test in the grep /^[$letters]{$length}$/ instead of the $sorted test would pick up all sorts of incorrect stuff. I realised this just after I posted but it was too late.... ++ for being far more on the ball than me.
For efficiency you could add another test to the grep like this:
@dict = qw (foo oof fff bar baz); $letters = 'ofo'; $sorted = join '', sort split//, $letters; $length = length $letters; @words = grep{ $length == length and $sorted eq join '', sort split// }@dict; print "@words";
The purpose of the $length test is to immediately fail if the length of our dict word is wrong thus avoiding the overhead of a sort as the match is bound to fail. Fixed classic = instead of == newbie Perl error thanks to Falkkin
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Is there a better way?
by dragonchild (Archbishop) on Aug 04, 2001 at 00:49 UTC | |
by tachyon (Chancellor) on Aug 04, 2001 at 00:56 UTC |