2016-08-26 15 views
-3

Я пытаюсь получить список неповторяющихся случайных чисел от 0 до 1000, каждый из которых будет отличаться друг от друга более чем на 10. Это означает, что разница между любыми выбранные числа не могут быть равны или меньше 10.Случайные числа без дубликатов и диапазон между

Я хочу поместить некоторый текст в svg с координатами x и y, которые не находятся в том же или закрытом положении.

randomNumbers = []; 
// First, pick a bin size b 
var b = 40; 
// Then generate a random number n0 between 0 and b 
var n0 = Math.floor(Math.random()*b); 
while(randomNumbers.length < 20){ 
    // Then generate the next random number n1 between n0 + 10 and n0 + 10 + b 
    var minRange = n0 + 10; 
    var maxRange = n0 + 10 + b; 
    var n1 = Math.floor(Math.random()*(maxRange - minRange) + minRange); 
    randomNumbers.push(n1); 
    n0 = n1; 
    // Continue in this manner until you have as many numbers as you need 
} 
// If you need them to be in random order, shuffle them after they are generated. 
function shuffle(array) { 
    let counter = array.length; 

    // While there are elements in the array 
    while (counter > 0) { 
     // Pick a random index 
     let index = Math.floor(Math.random() * counter); 

     // Decrease counter by 1 
     counter--; 

     // And swap the last element with it 
     let temp = array[counter]; 
     array[counter] = array[index]; 
     array[index] = temp; 
    } 

    return array; 
} 

var shuffledRandomNumbers = shuffle(randomNumbers); 
+2

Можете ли вы показать нам эту попытку? Без него это запрос кода. –

ответ

0

Во-первых, выбрать размер бен б (скажем, 20). Затем сгенерируйте случайное число n от 0 до b. Затем сгенерировать следующее случайное число пмежду п + 10 и п + 10 + б. Продолжайте таким образом (с помощью пя -1 + 10 и пя -1 + 10 + б для генерации пя) до тех пор, пока есть, как много чисел, как вам нужно, или до тех пор, ня не превышает 1000.

Что касается выбора размера корзины, я бы выбрал что-то, чтобы 1000/(b + 10) - это количество нужных вам чисел.

Если вам нужно, чтобы они были в случайном порядке, перетасуйте их после их создания.

+0

Звучит неплохо. Я обновлю свой код. Большое спасибо! – N0va

+0

Я отредактировал код, как я понял ваши инструкции, но я получаю результат как: 83,99,104,41,92,56,97,82,71,88,53,111,63,72,84,64,63,83,106,107. Это не то, что я ожидал. Например: 63 и 64 слишком близки друг к другу. – N0va

+0

@ N0va- Ну, код, который вы опубликовали, даже не приближен к тому, что я предложил. Как минимум, вы должны положить 'n0 = n1;' в конце первого цикла while. Это важно, если ваши номера должны быть разделены не менее чем на 10. (я обновил свой ответ, чтобы уточнить это.) Кроме того, какова цель массива 'b'? Просто выберите один номер 'b'. –

Смежные вопросы