85 lines
3.3 KiB
Plaintext
85 lines
3.3 KiB
Plaintext
#plist NSAppTransportSecurity @{NSAllowsArbitraryLoads:YES}
|
|
|
|
include "NSLog.incl"
|
|
|
|
local fn ConvertHexToInt( hexNumberStr as CFStringRef ) as NSUInteger
|
|
NSUInteger outVal = 0
|
|
ScannerRef scanner = fn ScannerWithString( hexNumberStr )
|
|
fn ScannerScanHexInt( scanner, @outVal )
|
|
end fn = outVal
|
|
|
|
|
|
local fn DigitalRoot( n as NSUInteger ) as NSUInteger
|
|
while ( n > 9 )
|
|
NSUInteger tot = 0
|
|
while ( n > 0 )
|
|
tot += n mod 10
|
|
n = fn floor( n / 10 )
|
|
wend
|
|
n = tot
|
|
wend
|
|
end fn = n
|
|
|
|
|
|
local fn HasDistinctLetters( hexNumberStr as CFStringRef ) as BOOL
|
|
NSUInteger A = 0, B = 0, C = 0, D = 0, E = 0, F = 0, length = len( hexNumberStr )
|
|
|
|
while ( length > 0 )
|
|
length--
|
|
unichar aChar = fn StringCharacterAtIndex( hexNumberStr, length )
|
|
select ( aChar )
|
|
case _"a" : if A = 0 then A = 1
|
|
case _"b" : if B = 0 then B = 1
|
|
case _"c" : if C = 0 then C = 1
|
|
case _"d" : if D = 0 then D = 1
|
|
case _"e" : if E = 0 then E = 1
|
|
case _"f" : if F = 0 then F = 1
|
|
end select
|
|
wend
|
|
if ( A + B + C + D + E + F ) > 3 then exit fn = YES
|
|
end fn = NO
|
|
|
|
|
|
local fn ParseDictionaryHexWords as CFArrayRef
|
|
CFURLRef url = fn URLWithString( @"http://wiki.puzzlers.org/pub/wordlists/unixdict.txt" )
|
|
CFStringRef string = lcase( fn StringWithContentsOfURL( url, NSUTF8StringEncoding, NULL ) )
|
|
CFArrayRef tempArr = fn StringComponentsSeparatedByCharactersInSet( string, fn CharacterSetNewlineSet )
|
|
CFMutableArrayRef dictArr = fn MutableArrayNew
|
|
CFStringRef tempStr
|
|
|
|
for tempStr in tempArr
|
|
if ( fn StringLength( tempStr ) > 3 ) // Keep four letter words and longer
|
|
CFRange range = fn StringRangeOfStringWithOptions( tempStr, @"^[a-f]+$", NSRegularExpressionSearch ) // Keep wordss with letters a to f
|
|
if range.location != NSNotFound then MutableArrayAddObject( dictArr, tempStr )
|
|
end if
|
|
next
|
|
end fn = fn ArrayWithArray( dictArr )
|
|
|
|
|
|
local fn ConvertWordsToHexValues as CFStringRef
|
|
CFArrayRef hexWordArray = fn ParseDictionaryHexWords
|
|
CFStringRef wordStr
|
|
CFMutableArrayRef mutArr = fn MutableArrayNew //fn MutableStringWithString( @"Root Word Base 10\n ---------------------------\n" )
|
|
CFMutableArrayRef lngArr = fn MutableArrayNew
|
|
|
|
for wordStr in hexWordArray
|
|
NSUInteger uintFromHex = fn ConvertHexToInt( wordStr )
|
|
NSUInteger digitalRoot = fn DigitalRoot( uintFromHex )
|
|
CFStringREf formatStr = fn StringWithFormat( @"%2lu %-8s %lu", digitalRoot, fn StringUTF8String( wordStr ), uintFromHex )
|
|
MutableArrayAddObject( mutArr, formatStr )
|
|
if ( fn HasDistinctLetters( wordStr ) == YES )
|
|
MutableArrayAddObject( lngArr, formatStr )
|
|
end if
|
|
next
|
|
CFStringRef headerStr = @"\nRoot Word Base 10\n ---------------------------\n"
|
|
CFArrayRef resultArr = fn ArraySortedArrayUsingSelector( mutArr, @"localizedCompare:" )
|
|
CFStringRef resultStr = fn ArrayComponentsJoinedByString( resultArr, @"\n" )
|
|
CFArrayRef uniquetArr = fn ArraySortedArrayUsingSelector( lngArr, @"localizedCompare:" )
|
|
CFStringRef uniqueStr = fn ArrayComponentsJoinedByString( uniquetArr, @"\n" )
|
|
CFStringRef finalStr = fn StringWithFormat( @"%@%@\n\nHex words with 3 > distinct letters:%@%@", headerStr, resultStr, headerStr, uniqueStr )
|
|
end fn = finalStr
|
|
|
|
NSLog( @"%@", fn ConvertWordsToHexValues )
|
|
|
|
HandleEvents
|