@SyntheticHand

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

Описание задачи: При нажатии b-13 выполняете функцию f13. Функция должна присвоить переменной a13 массив эмулирующий шахматную доску. Причем массив должен создаваться с помощью циклов. Для проверки - выведите массив в консоль.

Второй день сижу во втором цикле пытаясь разобраться как сделать так, что бы следующее число не повторялось, много всего перепробовал, ничего не получается. Помогите, кому не сложно.

let a13 = [];

function f13() {
  let out = "";
  for (let i = 0; i < 8; i++) {
    a13[i] = [];
    for (let k = a13[i].length; k < 6; k++) {
      a13[i][k] = Math.round(Math.random(0, 1));
      {
        if (a13[i][k] - 1 == a13[i][k]){
          a13[i][k] = 0;
        } else {
          a13[i][k] = 1;
        }
        out += a13[i][k];
      }
    }


    out += "<br>";
  }
  console.log(a13);

  document.querySelector(".out-13").innerHTML = out;
}

document.querySelector(".b-13").onclick = f13;
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi
лужу, паяю, ЭВМы починяю
Описанная задача внутренне противоречива и не может быть решена в полной мере.
Вместе с тем, если учесть, что в случайность тут будет не совсем случайна, то решение для целых чисел таково:
Делаете shuffle на исходный список и затем по-очереди извлекаете из него элементы.
С точки зрения результата это будет равносильно практически любому более сложному варианту.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Как сделать генерацию случайного числа в диапазоне без повторений?

Способов - великое множество. Например если тебе нужно от 1000 до 2000 то
можно просто взять последовательность от 1000 до 2000 и например перевернуть
в нем местами десятичные цифры.

Мы получим псевдо-случайную неповторяющуюуся последовательность. Хотя на глаз
ее случайность будет весьма условной. Чуть сложнее - можно брать за образец LFSR
семейство генераторов. Это - свиговый регистр. Здесь желательно бы играть не с
десятичными диапазонами а работать в рамках битов внутри машинного регистра.

Вобщем критериев качества для такого ГПСЧ много. Период например. Или авто-корреляция
между соседними значениеми в последовательности. Если рисовать например
звездное небо из LFSR то звезды будут выстраиваться в какие-то очевидные
полоски.

Гибизов предложил очень хороший вариант с shuffle массива чисел. Он рабочий хотя и требует
массива для хранения.

Думаю что есть методы и посложнее но задание автором поставлено так неграмотно
что тут надо просто больше обсуждать именно его на не ГПСЧ.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы