65 lines
1.6 KiB
Plaintext
65 lines
1.6 KiB
Plaintext
INSTALL @lib$+"SORTLIB"
|
|
sort% = FN_sortinit(0,0)
|
|
|
|
REM Count number of words in dictionary:
|
|
nwords% = 0
|
|
dict% = OPENIN("unixdict.txt")
|
|
WHILE NOT EOF#dict%
|
|
word$ = GET$#dict%
|
|
nwords% += 1
|
|
ENDWHILE
|
|
CLOSE #dict%
|
|
|
|
REM Create arrays big enough to contain the dictionary:
|
|
DIM dict$(nwords%), sort$(nwords%)
|
|
|
|
REM Load the dictionary and sort the characters in the words:
|
|
dict% = OPENIN("unixdict.txt")
|
|
FOR word% = 1 TO nwords%
|
|
word$ = GET$#dict%
|
|
dict$(word%) = word$
|
|
sort$(word%) = FNsortchars(word$)
|
|
NEXT word%
|
|
CLOSE #dict%
|
|
|
|
REM Sort arrays using the 'sorted character' words as a key:
|
|
C% = nwords%
|
|
CALL sort%, sort$(1), dict$(1)
|
|
|
|
REM Count the longest sets of anagrams:
|
|
max% = 0
|
|
set% = 1
|
|
FOR word% = 1 TO nwords%-1
|
|
IF sort$(word%) = sort$(word%+1) THEN
|
|
set% += 1
|
|
ELSE
|
|
IF set% > max% THEN max% = set%
|
|
set% = 1
|
|
ENDIF
|
|
NEXT word%
|
|
|
|
REM Output the results:
|
|
set% = 1
|
|
FOR word% = 1 TO nwords%-1
|
|
IF sort$(word%) = sort$(word%+1) THEN
|
|
set% += 1
|
|
ELSE
|
|
IF set% = max% THEN
|
|
FOR anagram% = word%-max%+1 TO word%
|
|
PRINT dict$(anagram%),;
|
|
NEXT
|
|
PRINT
|
|
ENDIF
|
|
set% = 1
|
|
ENDIF
|
|
NEXT word%
|
|
END
|
|
|
|
DEF FNsortchars(word$)
|
|
LOCAL C%, char&()
|
|
DIM char&(LEN(word$))
|
|
$$^char&(0) = word$
|
|
C% = LEN(word$)
|
|
CALL sort%, char&(0)
|
|
= $$^char&(0)
|