50 lines
2.0 KiB
Plaintext
50 lines
2.0 KiB
Plaintext
include "NSLog.incl"
|
|
|
|
local fn Dictionary as CFArrayRef
|
|
CFURLRef url = fn URLFileURLWithPath( @"/usr/share/dict/words" )
|
|
CFStringRef string = fn StringWithContentsOfURL( url, NSUTF8StringEncoding, NULL )
|
|
end fn = fn StringComponentsSeparatedByString( string, @"\n" )
|
|
|
|
local fn IsAnagram( wrd1 as CFStringRef, wrd2 as CFStringRef ) as BOOL
|
|
NSUInteger i
|
|
BOOL result = NO
|
|
|
|
if ( len(wrd1) != len(wrd2) ) then exit fn
|
|
if ( fn StringCompare( wrd1, wrd2 ) == NSOrderedSame ) then exit fn
|
|
CFMutableArrayRef mutArr1 = fn MutableArrayWithCapacity(0) : CFMutableArrayRef mutArr2 = fn MutableArrayWithCapacity(0)
|
|
for i = 0 to len(wrd1) - 1
|
|
MutableArrayAddObject( mutArr1, fn StringWithFormat( @"%C", fn StringCharacterAtIndex( wrd1, i ) ) )
|
|
MutableArrayAddObject( mutArr2, fn StringWithFormat( @"%C", fn StringCharacterAtIndex( wrd2, i ) ) )
|
|
next
|
|
SortDescriptorRef sd = fn SortDescriptorWithKeyAndSelector( NULL, YES, @"caseInsensitiveCompare:" )
|
|
if ( fn ArrayIsEqual( fn ArraySortedArrayUsingDescriptors( mutArr1, @[sd] ), fn ArraySortedArrayUsingDescriptors( mutArr2, @[sd] ) ) ) then result = YES
|
|
end fn = result
|
|
|
|
void local fn FindAnagramsInDictionary( wd as CFStringRef, dict as CFArrayRef )
|
|
CFStringRef string, temp
|
|
|
|
CFMutableArrayRef words = fn MutableArrayWithCapacity(0)
|
|
for temp in dict
|
|
if ( fn IsAnagram( lcase( wd ), temp ) ) then MutableArrayAddObject( words, temp )
|
|
next
|
|
string = fn ArrayComponentsJoinedByString( words, @", " )
|
|
NSLogSetTextColor( fn ColorText ) : NSLog( @"Anagrams for %@:", lcase(wd) )
|
|
NSLogSetTextColor( fn ColorSystemBlue ) : NSLog(@"%@\n",string)
|
|
end fn
|
|
|
|
void local fn DoIt
|
|
CFArrayRef dictionary = fn Dictionary
|
|
|
|
dispatchglobal
|
|
CFStringRef string
|
|
CFArrayRef words = @[@"bade",@"abet",@"beast",@"tuba",@"mace",@"scare",@"marine",@"antler",@"spare",@"leading",@"alerted",@"allergy",@"research",@"hustle",@"oriental",@"creationism",@"resistance",@"mountaineer"]
|
|
for string in words
|
|
fn FindAnagramsInDictionary( string, dictionary )
|
|
next
|
|
dispatchend
|
|
end fn
|
|
|
|
fn DoIt
|
|
|
|
HandleEvents
|