RosettaCodeData/Task/Anagrams/FutureBasic/anagrams.futurebasic

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" )