Как генерировать уникальные случайные числа относительно промежутка? Здравствуйте, тостеровчане!
Необходимо получать уникальные рандомные числа в определенном диапазоне и помещать их в массив, но они должны быть уникальны в том числе и относительно промежутка. На словах совсем не понятно, поэтому приведу пример:
Я вызываю функцию getRandomArray(10, 1, 100, 5), где 10 - количество чисел, 1 - минимальное число, 100 - максимальное число, 5 - "промежуток уникальности", после чего функция вернула число, например, 50 и поместила его в массив. Но в это массиве не должны оказаться числа в диапазоне ((50 - 5) - (50 + 5)), те 45-55. То есть в этом массиве не должно оказаться чисел 45, 46, 47, 48, ... , 53, 54, 55 и тд.
Сейчас есть код, который не работает из-за нехватки оперативной памяти, хотя логика вроде бы правильная.function rangeByInt(int, step) {
var range = [],
startRange = int - step,
endRange = int + step;
for (var i = startRange; i <= endRange; i++) {
range.push(i);
}
return range;
},
function arrayRandom(len, min, max) {
var toReturn = [],
tempObj = {},
i = 0;
for (; i < len; i++) {
var randomInt = Math.floor(Math.random() * (max - min + min));
const range = rangeByInt(randomInt, 30);
for (var j = 0; j

21 Авг 2019 в 06:04
207 +1
0
Ответы
1

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

function rangeByInt(int, step) {
var range = [],
startRange = int - step,
endRange = int + step;
for (var i = startRange; i <= endRange; i++) {
range.push(i);
}
return range;
}
function arrayRandom(len, min, max, uniqueRange) {
var toReturn = [],
tempObj = {};
for (var i = 0; i < len; i++) {
var randomInt;
do {
randomInt = Math.floor(Math.random() * (max - min + 1) + min);
} while (tempObj[randomInt] || checkRange(randomInt, uniqueRange, toReturn));
tempObj[randomInt] = true;
toReturn.push(randomInt);
}
return toReturn;
}
function checkRange(num, range, arr) {
for (var j = 0; j < arr.length; j++) {
if (Math.abs(num - arr[j]) <= range) {
return true;
}
}
return false;
}
console.log(arrayRandom(10, 1, 100, 5));

Этот код будет генерировать уникальные случайные числа относительно заданного промежутка и добавлять их в массив. Функция checkRange проверяет, чтобы новое число было уникальным относительно промежутка uniqueRange от уже сгенерированных чисел.

20 Апр 2024 в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир