My concern is this. With 7 or more characters, the possible letter combinations are in the thousands.. and then I have to check each combination to verify that it's a word. I'd like to do this using CGI but I fear I won't be able to get it fast enough where it won't time out.
You're thinking about this in the wrong direction. If you want to preprocess your dictionary like this (start with a word and then check whether any of its permutations are words), it will take a very long time. In fact, you will be checking the dictionary for every possible combination of letters. Since there are far fewer words in the dictionary than possible combinations of letters, you should look in the other direction: for each word in the dictionary, normalize it (to its sorted form), and then store it in a hash keyed on the normalized version.
my @words = do { open my $fh, "<", "/usr/dict/words" or die; <$fh>; }; chomp @words; sub normalize { join "", sort split //, $_[0]; } my %dict; push @{ $dict{normalize($_)} }, $_ for @words;
This will give you a structure %dict that looks like this:
abd => ["bad", "dab"], aepr => ["pear", "reap", "rape"] ...
Then if you want to find the words that are permutations of $foo, you look at the arrayref $dict{normalize($foo)}. You should also save this processed dictionary file somewhere, so you don't have to do all this work twice.
Is map the best way of going about this? I am not too familiar with map and this ability. And I really don't understand the logic of how to use the anagrams or why it would be faster.
Map is just a looping construct like foreach, while, etc.. It can't do anything magical that cannot be done with another type of programming construct. You can write both inefficient and efficient code with map. It will not write your algorithms for you. If you don't understand it, don't use it.

blokhead


In reply to Re: literati cheat / finding words from scrambled letters by blokhead
in thread literati cheat / finding words from scrambled letters by sulfericacid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.