98 lines
2.5 KiB
Plaintext
98 lines
2.5 KiB
Plaintext
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" )
|