So gehts:
Delphi-Quellcode:
Function NthPermutation (const aString : AnsiString; aCount : Integer) : AnsiString;
Var
pos, i, n : Cardinal;
chTemp : char;
Begin
n := Length(aString);
result := aString;
for i := n downto 2 do
begin
pos := acount mod i +1;
//switch
chTemp := result[i];
result[i] := result[Pos];
result[Pos] := chTemp;
acount := acount div i;
End;
End;
Procedure TForm1.Button1Click (Sender : TObject);
Const
sLetters = 'URLTKADPE';
f : Integer;
Begin
f := 1;
For i:=2 To Length (sLetters) do f:=f*i;
For i:=1 to f-1 do memo1.lines.add (NthPermutation (sLetters,i));
End;
Optimal ist es nicht, da die Funktion 'NthPermutation' die N.te Permutation einer Zeichenkette liefert und jedesmal von vorne anfängt, zu mischen. Aber egal.
omata's version verwendet Rekursion, die hier mischt den String jedesmal nach einem festgelegten Muster.