RosettaCodeData/Task/Ordered-words/Free-Pascal-Lazarus/ordered-words.pas
2025-02-27 18:35:13 -05:00

54 lines
1.1 KiB
ObjectPascal

Program Ordered_Words;
{$mode ObjFPC}{$H+}
Uses
Classes;
Const
FILENAME = 'unixdict.txt';
Function IsOrdered(Const S: String): boolean;
Var
I, Len: integer;
Begin
Len := Length(S);
If Len < 2 Then
Exit(True);
For I := 2 To Len Do
If S[I] < S[I - 1] Then
Exit(False);
Result := True;
End;
Var
WordList, OrderedWords: TStringList;
CurrentWord: string;
CurrentLength, LongestLength: integer;
Begin
LongestLength := 0;
WordList := TStringList.Create;
OrderedWords := TStringList.Create;
WordList.LoadFromFile(FILENAME);
For CurrentWord In WordList Do
Begin
CurrentLength := Length(CurrentWord);
If CurrentLength >= LongestLength Then
If IsOrdered(CurrentWord) Then
If CurrentLength > LongestLength Then
Begin
LongestLength := CurrentLength;
OrderedWords.Clear;
OrderedWords.Add(CurrentWord);
End
Else If CurrentLength = LongestLength Then
OrderedWords.Add(CurrentWord);
End;
For CurrentWord In OrderedWords Do
WriteLn(CurrentWord);
WordList.Free;
OrderedWords.Free;
End.