impersonalis, если смущает бесконечное время выполнение, то можно допилить так
Local newLI% = LI
newLI = Rand(1,Size)
If newLI = LI Then
newLI = (LI + 3) % Size
LI=newLI
Т.е при попадании на повторный элемент будет выбран элемент, который отстоит от этого на заданное число элементов.
P.S.
dsd это и написал
Перечитал и твой пост подробнее - нафига вместо 3 использовать rand не сильно понятно, поскольку величина все равно псевдо-случайная получается.
Как вариант, еще можно нагенерить случайную последовательность при старте в массив каким удобно способом, а потом ее уже использовать - будет быстро и с каким угодно распределением.