50 lines
1.2 KiB
Text
50 lines
1.2 KiB
Text
const TestOrder: array [0..11] of string =
|
|
('Blue','Blue','White','Blue','White','Blue',
|
|
'Red','White','White','Blue','White','Red');
|
|
|
|
|
|
procedure DoDutchFlag(Memo: TMemo; Order: array of string);
|
|
{Solve dutch flag color order using TStringList component}
|
|
{Encode colors "Red", "White" and "Blue" to "1", "2", and "3" }
|
|
{This allows them to be sorted in the TString List}
|
|
var I: integer;
|
|
var SL: TStringList;
|
|
var S2: string;
|
|
|
|
function DecodeList(SL: TStringList): string;
|
|
{Convert encoded colors 1, 2 and 3 to Red, White and Blue}
|
|
var I: integer;
|
|
begin
|
|
Result:='';
|
|
for I:=0 to SL.Count-1 do
|
|
begin
|
|
if I>0 then Result:=Result+',';
|
|
if SL[I]='1' then Result:=Result+'Red'
|
|
else if SL[I]='2' then Result:=Result+'White'
|
|
else Result:=Result+'Blue'
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
SL:=TStringList.Create;
|
|
try
|
|
{Encode colors from array of strings}
|
|
for I:=0 to High(TestOrder) do
|
|
begin
|
|
if Order[I]='Red' then SL.Add('1')
|
|
else if Order[I]='White' then SL.Add('2')
|
|
else SL.Add('3');
|
|
end;
|
|
Memo.Lines.Add('Original Order:');
|
|
Memo.Lines.Add('['+DecodeList(SL)+']');
|
|
SL.Sort;
|
|
Memo.Lines.Add('Original Order:');
|
|
Memo.Lines.Add('['+DecodeList(SL)+']');
|
|
finally SL.Free; end;
|
|
end;
|
|
|
|
|
|
procedure ShowDutchFlag(Memo: TMemo);
|
|
begin
|
|
DoDutchFlag(Memo,TestOrder);
|
|
end;
|