Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

(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
Domain Nodelet?
Node Status?
node history
Node Type: perlmeditation [id://102214]
Approved by root
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (5)
As of 2021-10-25 07:42 GMT
Find Nodes?
    Voting Booth?
    My first memorable Perl project was:

    Results (89 votes). Check out past polls.