Jim Hurley wrote:
Here is another NPR (National Public Radio) puzzle:
"From listener Frank Morgan, a mathematician at Williams College. (He
also has a puzzle page at mathchat.org.) Think of a word whose meaning
you can make plural by adding an A at the start. Start with a very
common singular noun, add the letter A at the beginning, and you'll
make the meaning plural. What word is it?"
Note that the "meaning" is made plural, not the word itself.
The straightforward approach is not very fruitful. Listing all words
which can be derived by pre-pending the letter "a" yields 559 words.
Hard to find the word satisfying the conditions of the puzzle from so
large a list.
The best I was able to do was a list of 103 words to choose from. (I
realize that that statement is enigmatic.)
To save time it is imperative that the dictionary be converted to an
array, i.e. for each word (tWord) in the dictionary:
put true into dictArray[tWord]
The dictionary is compressed in a custom variable--see the "Get
started button."
This is harder than the last NPR puzzle. In the message box run:
go stack url "http://home.infostations.net/jhurley/NPRpuzzle.rev"
It is a large file (370k) so be patient.
Interesting. Unfortunately, I know the answer because I spotted it
looking at the 559 word list, before I got on to the next part - so that
limits the amount I can do to improve the list without risk of using
that knowledge to do so.
I applied a few safe heuristics but those only got it down to 470
alternatives.
code ahead - don't read further unless you want to read code now ....
The hard work of the search, I did in 181 msecs as
repeat for each line t in tDict
if char 1 of t = "a" or char 1 of t = "A" then
if t = lower(t) and the number of chars in t > 3 then
put true into wDict[char 2 to -1 of t]
end if
else
if wDict[t] and t = lower(t) then put t & cr after tResult
end if
end repeat
or in half that time (90 - 92 msecs) as
put true into stillOnA
repeat for each line t in tDict
if stillOnA then
if char 1 of t = "a" or char 1 of t = "A" then
if t = lower(t) and the number of chars in t > 3 then
put true into wDict[char 2 to -1 of t]
end if
else
put false into stillOnA
if wDict[t] and t = lower(t) then put t & cr after tResult
end if
else
if wDict[t] and t = lower(t) then put t & cr after tResult
end if
end repeat
--
Alex Tweedly http://www.tweedly.net
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.344 / Virus Database: 267.10.16/83 - Release Date: 26/08/2005
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution