Генератор случайных чисел без повторений в последующих генерациях
Всем привет! Прошу помочь с одной задачей. Нужно сделать генератор случайных чисел из диапазона чисел, но так чтобы в последующих генерациях числа не повторялись, и чтобы можно было менять кол-во генерации значений. Генерация до тех пока числа не кончатся, потом заново генерация. Возможно ли как то реализовать это?
Пример: Диапазон чисел: 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>
|
Samik,
ссылка на Учебник вверху
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener("DOMContentLoaded", function() {
function g(a, c, d) {
for (var b = []; a <= c; a++) b = b.concat(b.splice(Math.random() * b.length | 0, 1, a));
return function() {
return b.length >= d ? b.splice(b.length - d) : b.splice(0)
}
}
function e() {
var a = g.apply(null, f);
d.innerHTML = "";
for (var c = a(); c.length; c = a()) d.innerHTML += c + "<br>"
}
var h = document.querySelectorAll("input"),
d = document.querySelector("div"),
k = document.querySelector("button"),
f = [0, 48, 6];
[].forEach.call(h, function(a, c) {
a.addEventListener("input", function() {
f[c] = +a.value
})
});
e();
k.addEventListener("click", e)
});
</script>
</head>
<body>
<input name="" value="0">
<input name="" value="48">
<input name="" value="6">
<button type="button" >go</button>
<div></div>
</body>
</html>
|
Цитата:
|
<!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>
<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();
[].forEach.call(document.querySelectorAll('input'), function(el){
el.oninput=sm;
});
</script>
</body>
</html>
поправил, теперь автоматом будет обновляться |
А как можно сделать чтобы до каждой последующей генерации учитывалось количество чисел? Например при первой генерации нужно 3 числа, а при последующей уже 7 чисел например.
|
количество случайных чисел
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script>
window.addEventListener("DOMContentLoaded", function() {
document.querySelector("button").addEventListener("click", function() {
let min = +document.querySelector("[name='min']").value;
let max = +document.querySelector("[name='max']").value;
let length = max - min + 1;
let arr = document.querySelector("[name='arr']").value.split(/\D+/);
let range = Array.from({
length
}, (v, i) => min + i);
range.sort(_ => Math.random() - .5);
document.querySelector("div").innerHTML = arr.map(i => range.splice(0, i)).join("<br>")
})
});
</script>
</head>
<body>
<input name="min" value="1">
<input name="max" value="10">
<input name="arr" value="3,7">
<button type="button">go</button>
<div></div>
</body>
</html>
|
| Часовой пояс GMT +3, время: 12:28. |