57 lines
1.6 KiB
Plaintext
57 lines
1.6 KiB
Plaintext
$ include "seed7_05.s7i";
|
|
include "gethttp.s7i";
|
|
include "strifile.s7i";
|
|
|
|
const type: anagramHash is hash [string] array string;
|
|
|
|
const func string: sort (in string: stri) is func
|
|
result
|
|
var string: sortedStri is "";
|
|
local
|
|
var integer: i is 0;
|
|
var integer: j is 0;
|
|
var char: ch is ' ';
|
|
begin
|
|
sortedStri := stri;
|
|
for i range 1 to length(sortedStri) do
|
|
for j range succ(i) to length(sortedStri) do
|
|
if sortedStri[i] > sortedStri[j] then
|
|
ch := sortedStri[i];
|
|
sortedStri @:= [i] sortedStri[j];
|
|
sortedStri @:= [j] ch;
|
|
end if;
|
|
end for;
|
|
end for;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
local
|
|
var file: dictFile is STD_NULL;
|
|
var string: word is "";
|
|
var string: sortedLetters is "";
|
|
var anagramHash: anagrams is anagramHash.value;
|
|
var integer: length is 0;
|
|
var integer: maxLength is 0;
|
|
begin
|
|
dictFile := openStriFile(getHttp("wiki.puzzlers.org/pub/wordlists/unixdict.txt"));
|
|
while hasNext(dictFile) do
|
|
readln(dictFile, word);
|
|
sortedLetters := sort(word);
|
|
if sortedLetters in anagrams then
|
|
anagrams[sortedLetters] &:= word;
|
|
else
|
|
anagrams @:= [sortedLetters] [] (word);
|
|
end if;
|
|
length := length(anagrams[sortedLetters]);
|
|
if length > maxLength then
|
|
maxLength := length;
|
|
end if;
|
|
end while;
|
|
close(dictFile);
|
|
for sortedLetters range sort(keys(anagrams)) do
|
|
if length(anagrams[sortedLetters]) = maxLength then
|
|
writeln(join(anagrams[sortedLetters], ", "));
|
|
end if;
|
|
end for;
|
|
end func;
|