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