66 lines
2.2 KiB
Text
66 lines
2.2 KiB
Text
File_Open("|(PATH_ONLY)\unixdict.txt")
|
|
|
|
Repeat(ALL) {
|
|
Reg_Copy_Block(10, CP, EOL_Pos) // original word
|
|
Call("SORT_LETTERS") // sort letters of the word
|
|
EOL
|
|
IC(' ') Reg_Ins(10) // add the original word at eol
|
|
Line(1, ERRBREAK)
|
|
}
|
|
|
|
Sort(0, File_Size) // sort list according to anagrams
|
|
|
|
BOF
|
|
Search("|F") Search(' ') // first word in the list
|
|
Reg_Copy_Block(10, BOL_Pos, CP+1) // reg 10 = sorted anagram word
|
|
Reg_Copy_Block(11, CP, EOL_Pos) // reg 11 = list of words in current group
|
|
Reg_Empty(12) // reg 12 = list of words in largest groups
|
|
Reg_Set(13, "
|
|
")
|
|
#1 = 1 // words in this group
|
|
#2 = 2 // words in largest group found
|
|
Repeat(ALL) {
|
|
Line(1, ERRBREAK)
|
|
if (Match(@10, ADVANCE) == 0) { // same group as previous word?
|
|
Reg_Copy_Block(11, CP-1, EOL_Pos, APPEND) // add word to this group
|
|
#1++
|
|
} else { // different anagram group
|
|
Search(" ", ERRBREAK)
|
|
if (#1 == #2) { // same size as the largest?
|
|
Reg_Set(12, @13, APPEND) // append newline
|
|
Reg_Set(12, @11, APPEND) // append word list
|
|
}
|
|
if (#1 > #2) { // new larger size of group
|
|
Reg_Set(12, @11) // replace word list
|
|
#2 = #1
|
|
}
|
|
Reg_Copy_Block(10, BOL_Pos, CP+1)
|
|
Reg_Copy_Block(11, CP, EOL_Pos) // first word of new group
|
|
#1 = 1
|
|
}
|
|
}
|
|
|
|
Buf_Quit(OK) // close word list file
|
|
Buf_Switch(Buf_Free) // output results in a new edit buffer
|
|
Reg_Ins(12) // display all groups of longest anagram words
|
|
Return
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Sort characters in current line using Insertion sort
|
|
//
|
|
:SORT_LETTERS:
|
|
GP(EOL_pos) #9 = Cur_Col-1
|
|
for (#1 = 2; #1 <= #9; #1++) {
|
|
Goto_Col(#1) #8 = Cur_Char
|
|
#2 = #1
|
|
while (#2 > 1) {
|
|
#7 = Cur_Char(-1)
|
|
if (#7 <= #8) { break }
|
|
Ins_Char(#7, OVERWRITE)
|
|
#2--
|
|
Goto_Col(#2)
|
|
}
|
|
Ins_Char(#8, OVERWRITE)
|
|
}
|
|
return
|