Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
93
Task/Anagrams/ALGOL-68/anagrams.alg
Normal file
93
Task/Anagrams/ALGOL-68/anagrams.alg
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# find longest list(s) of words that are anagrams in a list of words #
|
||||
# use the associative array in the Associate array/iteration task #
|
||||
PR read "aArray.a68" PR
|
||||
|
||||
# returns the number of occurances of ch in text #
|
||||
PROC count = ( STRING text, CHAR ch )INT:
|
||||
BEGIN
|
||||
INT result := 0;
|
||||
FOR c FROM LWB text TO UPB text DO IF text[ c ] = ch THEN result +:= 1 FI OD;
|
||||
result
|
||||
END # count # ;
|
||||
|
||||
# returns text with the characters sorted into ascending order #
|
||||
PROC char sort = ( STRING text )STRING:
|
||||
BEGIN
|
||||
STRING sorted := text;
|
||||
FOR end pos FROM UPB sorted - 1 BY -1 TO LWB sorted
|
||||
WHILE
|
||||
BOOL swapped := FALSE;
|
||||
FOR pos FROM LWB sorted TO end pos DO
|
||||
IF sorted[ pos ] > sorted[ pos + 1 ]
|
||||
THEN
|
||||
CHAR t := sorted[ pos ];
|
||||
sorted[ pos ] := sorted[ pos + 1 ];
|
||||
sorted[ pos + 1 ] := t;
|
||||
swapped := TRUE
|
||||
FI
|
||||
OD;
|
||||
swapped
|
||||
DO SKIP OD;
|
||||
sorted
|
||||
END # char sort # ;
|
||||
|
||||
# read the list of words and store in an associative array #
|
||||
|
||||
CHAR separator = "|"; # character that will separate the anagrams #
|
||||
|
||||
IF FILE input file;
|
||||
STRING file name = "unixdict.txt";
|
||||
open( input file, file name, stand in channel ) /= 0
|
||||
THEN
|
||||
# failed to open the file #
|
||||
print( ( "Unable to open """ + file name + """", newline ) )
|
||||
ELSE
|
||||
# file opened OK #
|
||||
BOOL at eof := FALSE;
|
||||
# set the EOF handler for the file #
|
||||
on logical file end( input file, ( REF FILE f )BOOL:
|
||||
BEGIN
|
||||
# note that we reached EOF on the #
|
||||
# latest read #
|
||||
at eof := TRUE;
|
||||
# return TRUE so processing can continue #
|
||||
TRUE
|
||||
END
|
||||
);
|
||||
REF AARRAY words := INIT LOC AARRAY;
|
||||
STRING word;
|
||||
WHILE NOT at eof
|
||||
DO
|
||||
STRING word;
|
||||
get( input file, ( word, newline ) );
|
||||
words // char sort( word ) +:= separator + word
|
||||
OD;
|
||||
# close the file #
|
||||
close( input file );
|
||||
|
||||
# find the maximum number of anagrams #
|
||||
|
||||
INT max anagrams := 0;
|
||||
|
||||
REF AAELEMENT e := FIRST words;
|
||||
WHILE e ISNT nil element DO
|
||||
IF INT anagrams := count( value OF e, separator );
|
||||
anagrams > max anagrams
|
||||
THEN
|
||||
max anagrams := anagrams
|
||||
FI;
|
||||
e := NEXT words
|
||||
OD;
|
||||
|
||||
print( ( "Maximum number of anagrams: ", whole( max anagrams, -4 ), newline ) );
|
||||
# show the anagrams with the maximum number #
|
||||
e := FIRST words;
|
||||
WHILE e ISNT nil element DO
|
||||
IF INT anagrams := count( value OF e, separator );
|
||||
anagrams = max anagrams
|
||||
THEN
|
||||
print( ( ( value OF e )[ ( LWB value OF e ) + 1: ], newline ) )
|
||||
FI;
|
||||
e := NEXT words
|
||||
OD
|
||||
FI
|
||||
Loading…
Add table
Add a link
Reference in a new issue