include "ConsoleWindow" def tab 9 begin globals dim dynamic gDictionary(_maxLong) as Str255 end globals local fn IsAnagram( word1 as Str31, word2 as Str31 ) as Boolean dim as long i, j, h, q dim as Boolean result if word1[0] != word2[0] then result = _false : exit fn for i = 0 to word1[0] h = 0 : q = 0 for j = 0 to word1[0] if word1[i] == word1[j] then h++ if word1[i] == word2[j] then q++ next if h != q then result = _false : exit fn next result = _true end fn = result local fn LoadDictionaryToArray '~'1 dim as CFURLRef url dim as CFArrayRef arr dim as CFStringRef temp, cfStr dim as CFIndex elements dim as Handle h dim as Str255 s dim as long fileLen, i kill dynamic gDictionary url = fn CFURLCreateWithFileSystemPath( _kCFAllocatorDefault, @"/usr/share/dict/words", _kCFURLPOSIXPathStyle, _false ) open "i", 2, url fileLen = lof(2, 1) h = fn NewHandleClear( fileLen ) if ( h ) read file 2, [h], fileLen cfStr = fn CFStringCreateWithBytes( _kCFAllocatorDefault, #[h], fn GetHandleSize(h), _kCFStringEncodingMacRoman, _false ) if ( cfStr ) arr = fn CFStringCreateArrayBySeparatingStrings( _kCFAllocatorDefault, cfStr, @"\n" ) CFRelease( cfStr ) elements = fn CFArrayGetCount( arr ) for i = 0 to elements - 1 temp = fn CFArrayGetValueAtIndex( arr, i ) fn CFStringGetPascalString( temp, @s, 256, _kCFStringEncodingMacRoman ) gDictionary(i) = s next CFRelease( arr ) end if fn DisposeH( h ) end if close #2 CFRelease( url ) end fn local fn FindAnagrams( whichWord as Str31 ) dim as long elements, i print "Anagrams for "; UCase$(whichWord); ":", elements = fn DynamicNextElement( dynamic( gDictionary ) ) for i = 0 to elements - 1 if ( len( gDictionary(i) ) == whichWord[0] ) if ( fn IsAnagram( whichWord, gDictionary(i) ) == _true ) print gDictionary(i), end if end if next print end fn fn LoadDictionaryToArray fn FindAnagrams( "bade" ) fn FindAnagrams( "abet" ) fn FindAnagrams( "beast" ) fn FindAnagrams( "tuba" ) fn FindAnagrams( "mace" ) fn FindAnagrams( "scare" ) fn FindAnagrams( "marine" ) fn FindAnagrams( "antler" ) fn FindAnagrams( "spare" ) fn FindAnagrams( "leading" ) fn FindAnagrams( "alerted" ) fn FindAnagrams( "allergy" ) fn FindAnagrams( "research") fn FindAnagrams( "hustle" ) fn FindAnagrams( "oriental") def tab 3 print fn FindAnagrams( "creationism" ) fn FindAnagrams( "resistance" ) fn FindAnagrams( "mountaineer" )