Случайный массив между заданным диапазоном целых чисел, содержащий по крайней мере один экземпляр каждого целого числа в диапазоне - PullRequest
1 голос
/ 07 января 2020

Я пытаюсь сгенерировать массив, который содержит случайный набор целых чисел в диапазоне, который будет содержать хотя бы один экземпляр каждого возможного целого числа. Я могу сгенерировать массив со случайными целыми числами между диапазонами, но не могу понять, как сгенерировать массив, который содержит хотя бы один экземпляр каждого целого числа в указанном диапазоне. Я пытаюсь создать массив, который содержит 84 ключа с диапазоном от 0 до 40 (в том числе от 0 до 40). Массив должен содержать хотя бы один экземпляр каждого возможного целого числа в указанном диапазоне. Вот код, который у меня сейчас есть:

<script>
    ints = [];

    function sortInt(a, b) {
        return a - b;
    }

    for (i=0; i<84; i++) {
        ints.push(Math.round(Math.random() * 40));
    }

    ints.sort(sortInt);

    for (s=0; s<ints.length; s++) {
        document.write(ints[s] + '<br />');
    }
</script>

Ответы [ 4 ]

0 голосов
/ 07 января 2020

Я бы использовал для этого rando js .com . Возьмите перетасованный массив от 0 до 40, затем добавьте к нему еще 43 случайных числа от 0 до 40 и выполните сортировку:

var ints = randoSequence(40);
for(var i = 0; i < 43; i++) ints.push(rando(40));
console.log( ints.sort((a, b) => {return a - b;}) );
<script src="https://randojs.com/1.0.0.js"></script>
0 голосов
/ 07 января 2020

Я думаю, что если ему нужны все целые числа между диапазонами, вы можете начать с генерации между диапазонами. Тогда все остальные числа могут быть случайными. Наконец, просто нужно использовать sort() в массиве.

Вот так:

const generate = (till, count) => {
  const array = Array.from(new Array(till + 1).keys());

  for (let i = till; i < count; i++) {
     array.push(Math.round(Math.random() * till));
  }
    
  return array.sort((a,b) => a - b);
}

const result = generate(40, 84);
console.log(result);

Надеюсь, это поможет!

0 голосов
/ 07 января 2020

Вы можете создать случайный индекс для вставки числа из нужного диапазона:

if (i == randomIndex)
    ints.push(startRange);
else
    ints.push(Math.floor(Math.random() * endRange) + startRange);

Пример:

ints = [];

let startRange = 1, endRange = 84;
let randomIndex = Math.floor(Math.random() * endRange) + startRange;

for (i=0; i < 84; i++) {
    if (i == randomIndex)
        ints.push(startRange);
    else
        ints.push(Math.floor(Math.random() * endRange) + startRange);
}

ints.sort((a,b) => a - b);
console.log(ints)
0 голосов
/ 07 января 2020

Пожалуйста, попробуйте следующий фрагмент

function generateNumbers(number, startRange, endRange) {
    if (startRange > endRange) return generateNumbers(number, endRange, startRange);
    
    const arr = [];
    for (let i = startRange; i <= endRange; ++i) arr.push(i);
    
    while(number > arr.length) {
        const newNumber = Math.round(Math.random() * (endRange - startRange));
        arr.push(newNumber);
    }
    
    arr.sort((a, b) => a - b);
    
    return arr;
}

console.log(generateNumbers(84, 0, 40));
...