Jetzt ist meine Variante im Vorteil
:
Delphi-Quellcode:
procedure RandomArray(var AArray: array of Integer; const AStart, AStep, ACount: Integer);
var
List: TList;
i, Index: Integer;
begin
if ACount < Length(AArray) then
raise EInvalidArgument.Create('ACount muss größer/gleich der Länge von AArray sein');
List := TList.Create;
try
i := AStart;
repeat // erst alle Werte in die Liste packen, ...
List.Add(Pointer(i));
Inc(i, AStep);
until i = AStart + AStep * ACount;
for i := Low(AArray) to High(AArray) do // ...dann zufällig einen rauspicken
begin
Index := Random(List.Count);
AArray[i] := Integer(List.Items[Index]);
List.Delete(Index);
end;
finally
List.Free;
end;
end;
(EInvalidArguement ist in "Math" deklariert)
Falls niemand wieder einen Super-Algorithmus vorlegt, werde ich diesen Code morgen in den Library-Thread posten
.