Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Is there a better way?

by tachyon (Chancellor)
on Aug 04, 2001 at 00:39 UTC ( [id://102152]=note: print w/replies, xml ) Need Help??


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";

Update

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.

Update 2

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
    That doesn't quite do it. You pick up 'ffo' as well. What is needed is a way of saying "Give me all the words with 2 o's and 1 f."

    ------
    /me wants to be the brightest bulb in the chandelier!

      Realised that just after I posted and added a fix, hoping no one would notice - damn caught out ! :-)

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://102152]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (2)
As of 2024-04-24 23:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found