Задача весьма простая — нам надо получить цепочку случайных чисел так, чтобы ближайшие в ряду числа не повторялись. Например в выборке от 1 — 3 цепочка должна выглядеть вот так : 1.2.3.2.3.1.2.1.3 и так далее. Первое, что приходит на ум, это проверять каждое следующее сгенерированное число с предыдущим.
Но, как минимум это будет затратно, ибо на коротких выборках , к примеру 1-2 , будет очень часто попадаться одинаковое число, и потребуется еще один цикл чтобы создать новое. Посему, как вариант можно убрать после выборки число из массива сразу , чтобы в следующей выборке оно гарантированно отсутствовало. На схеме это выглядит примерно вот так: Первая выборка дает нам число 3. Мы его убираем из массива из которого выбираются числа. В следующей выборке этого числа нет, и мы выбираем допустим число 2. После этого возвращаем 3 обратно в массив получая в массиве 4.1.3, так как двойку мы убрали она там точно не попадется.
И далее идет по кругу, столько раз сколько нам надо. На гифке, сверху