Генератор случайных чисел без повторений в последующих генерациях
Всем привет! Прошу помочь с одной задачей. Нужно сделать генератор случайных чисел из диапазона чисел, но так чтобы в последующих генерациях числа не повторялись, и чтобы можно было менять кол-во генерации значений. Генерация до тех пока числа не кончатся, потом заново генерация. Возможно ли как то реализовать это?
Пример: Диапазон чисел: 0-48 Количество значений за 1 генерацию: 6 Нажимаем кнопку, генерируются числа Результат: Генерация 1: 12 5 7 23 8 9 Генерация 2: 25 6 3 4 36 2 Генерация 3: 17 21 27 42 15 39 Не просто генерация чисел, не так чтобы выдала: Генерация 1: 12 5 7 23 8 9 Генерация 2: 11 7 15 33 43 10 Генерация 3: 8 22 34 47 0 13 Выделены цифры которые повторяются при последующей генерации |
Samik,
создали массив, перемешали, пока длина массива больше n, то return arr.splice(0,n) иначе ... ??? |
Цитата:
|
Цитата:
|
Цитата:
|
Samik,
:blink: не понимаю, что вы пишите. вопрос вроде простой: что будет на 9-ой генерации? |
Цитата:
диапазон: 0-10 Количество значений за 1 генерацию: 3 Генерация 1: 1 3 5 Генерация 2: 2 4 6 Генерация 3: 7 9 8 Генерация 4: 0 10 Генерация 5: уже ничего не будет генерировать Если к 9ой генерации чисел из диапазона уже не останется то результата не будет, и нужно делать сброс чтобы начать с начала |
Samik,
<script>
function gn(b, d, c) {
for (var a = []; b <= d; b++) a = a.concat(a.splice(Math.random() * a.length | 0, 1, b));
return function() {
return a.length >= c ? a.splice(a.length - c) : a.splice(0)
}
};
var x = gn(0,10,3)
for (var i=0; i<5; i++) {document.write(x()+"<br>")}
</script>
|
Цитата:
![]() |
<!DOCTYPE html>
<html lang="en">
<head>
<style>
input{
width: 30px;
}
</style>
</head>
<body>
От <input type="text" value="0" id="ot"> до <input type="text" value="10" id="do"> по <input type="text" value="3" id="num"> чисел<br>
<button id="gen">Генерировать</button><button id="sb">Сброс</button>
<div id="res"></div>
<script>
function gn(b, d, c) {
for (var a = []; b <= d; b++) a = a.concat(a.splice(Math.random() * a.length | 0, 1, b));
return function() {
return a.length >= c ? a.splice(a.length - c) : a.splice(0);
};
}
function sm(){
var x = gn(document.querySelector('#ot').value,document.querySelector('#do').value,document.querySelector('#num').value);
document.querySelector('#gen').onclick = function(){
document.querySelector('#res').innerHTML += x()+"<br>";
};
document.querySelector('#res').innerHTML='';
};
sm();
document.querySelector('#sb').onclick=sm;
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 03:26. |