Как реализовать генерацию пар чисел без повторений?

Для реализации генерации пар чисел без повторений в JavaScript можно использовать различные подходы. Вот несколько вариантов:

1. Массив с исключением:
- Создайте пустой массив для хранения сгенерированных пар чисел.
- Запустите цикл, который будет генерировать новую пару чисел на каждой итерации.
- Внутри цикла сгенерируйте новую пару чисел и проверьте, нет ли уже такой пары в массиве.
- Если есть, продолжайте генерацию новых пар чисел до тех пор, пока не будет найдена уникальная пара.
- Если пара чисел уникальна, добавьте ее в массив.
- Повторяйте цикл до тех пор, пока массив не будет содержать все нужные пары чисел.

Пример реализации:

   function generatePairs(min, max, count) {
     const pairs = [];
     while (pairs.length < count) {
       const a = Math.floor(Math.random() * (max - min + 1)) + min;
       const b = Math.floor(Math.random() * (max - min + 1)) + min;
       const pair = [a, b];
       if (!pairs.some(existingPair => existingPair[0] === pair[0] && existingPair[1] === pair[1])) {
         pairs.push(pair);
       }
     }
     return pairs;
   }

   const pairs = generatePairs(1, 10, 5);
   console.log(pairs);

В данном примере функция generatePairs генерирует 5 уникальных пар чисел от 1 до 10.

2. Перемешивание:
- Создайте массив, содержащий все числа, из которых нужно сгенерировать пары.
- Используя алгоритм случайного доступа (например, Fisher–Yates shuffle), перемешайте массив.
- Возьмите первые два числа из перемешанного массива и создайте пару.
- Повторяйте шаг 3 до тех пор, пока не будут сгенерированы все нужные пары.

Пример реализации:

   function generatePairs(min, max, count) {
     const numbers = Array.from({ length: max - min + 1 }, (_, i) => i + min);
     const shuffled = shuffle(numbers);
     const pairs = [];
     for (let i = 0; i < count; i++) {
       const pair = [shuffled[i * 2], shuffled[i * 2 + 1]];
       pairs.push(pair);
     }
     return pairs;
   }

   function shuffle(array) {
     let currentIndex = array.length, temporaryValue, randomIndex;
     while (currentIndex !== 0) {
       randomIndex = Math.floor(Math.random() * currentIndex);
       currentIndex -= 1;
       temporaryValue = array[currentIndex];
       array[currentIndex] = array[randomIndex];
       array[randomIndex] = temporaryValue;
     }
     return array;
   }

   const pairs = generatePairs(1, 10, 5);
   console.log(pairs);

В этом примере функция generatePairs генерирует 5 случайных уникальных пар чисел от 1 до 10, используя алгоритм перемешивания.

Оба этих подхода позволяют сгенерировать уникальные пары чисел без повторений в заданном диапазоне. Выбирайте тот, который больше подходит для ваших потребностей и требований.