Vorschlag:
1. merke dir alle mehrfach vorkommende Titel und deren Anzahl
2. lösche die mehrfachen Titel, so dass jeder Titel nur einmal vorkommt.
3. mische die Liste
4. Füge die mehrfachen Titel zufällig einzeln ein.
Dabei sind nur Positionen zulässig, die nicht unmittelbar vor oder nach dem gleichen Titel liegen.
- Angenommen die Liste hat (a) Einträge.
- damit gibt es (a + 1) Positionen, an die der neue Eintrag eingefügt werden kann
- für jeden gleichen Titel, der bereits in der Liste ist, verringert sich die Anzahl der Positionen um 2: (a + 1 - 2b)
Delphi-Quellcode:
procedure MehrfachTitelEinfuegen(AList: TStringList; const ATitel: string; ACount: Integer);
begin
for var b := 1 to ACount do
begin
var pos := Rand(AList.Count + 1 - 2 * b);
{ungültige Positionen überspringen}
for n := 0 to AList.Count - 1 do
begin
if AList(n) = ATitel then
Inc(pos, 2);
if n = pos then
Break;
end;
Alist.Insert(pos, ATitel);
end;
end;