Дуже проста задача, якщо ви почнете використовувати TList. Вам треба сформувати TList, (TStrings пiдiйде), в якому кожен елемент буде кожною лiтерою з тексту. А потiм ви просто добавляете у вихiдний текст по однiй лiтерi, рандомно, з початкового перелiку i кожен раз видалаете те, що вже вставили. Таким чином, TList.Count буде кожен раз зменшуватись, до нуля.
var
src : string;
srcs: TStrings;
out : string;
i:integer;
begin
srcs := TStringList.Create;
for i:=1 to length(src) do // copy data from array to List
srcs.Add(src[i]);
out:='';
while (srcs.Count>0) do
begin
i := random(srcs.Count-1); // Choose the next element from the rest
out := out + srcs[i];
srcs.Delete(i); // remove added element from the source List.
end;
srcs.Free;
end;
(писав без редактора, тому, вибачаюсь, якщо е якiсь помилки).