Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot

(Golf) Anagram Finder

by tadman (Prior)
on Aug 04, 2001 at 09:24 UTC ( #102214=perlmeditation: print w/replies, xml ) Need Help??

Since people were really starting to take an interest in the anagram problem posed at Is there a better way for finding anagrams?, why not golf it?

The idea is to write a function which given a jumbled word, will find any matching entries in a supplied dictionary, and return an array of these qualifying matches. The word, and dictionary, are only expected to contain alphanumeric characters, although the dictionary may contain some stray material such as the odd bit of punctuation which can probably be ignored.

Here's my first pass that comes in just under three digits at 98 characters:
sub a { sub z{join'',sort/./g}push(@{$d{&z}},$_)for(@{$_[1]});$w=z$_=$_[0];map +{@{$d{$_}}}grep{/$w/i}keys%d } # Test Stub open ($dict, "/usr/dict/words") || die "No words\n"; @dict = grep { chomp; } <$dict>; close ($dict); print a('geniretat',\@dict);

Replies are listed 'Best First'.
Re: (Golf) Anagram Finder
by Masem (Monsignor) on Aug 04, 2001 at 10:10 UTC

      I like this method but why do you think this works (also 59):

      @dict = qw (foo oof fff bar baz); $letters = 'ofo'; print anagram($letters, \@dict); sub anagram { grep{(join'',sort split//,$_[0])eq join'',sort/./g}@{pop()} }

      But this does not

      grep{(join'',sort split//,$_[0])eq join'',sort/./g}@{pop}

      Why do you need the parens to make pop() work?




        @{pop} doesn't work as you intended, because it refers to the plain old array @pop. The parentheses in @{pop()} make it into an expression, which is evaluated.

        However, you could save a character by using a plus instead, as in @{+pop}.

        Update: But, if you wanted to save even more characters... :)

        sub anagram { grep"@{[sort$_[0]=~/./g]}"eq"@{[sort/./g]}",@{+pop} }
        51 characters.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlmeditation [id://102214]
Approved by root
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (6)
As of 2017-02-22 04:50 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (324 votes). Check out past polls.