28.09.2017, 17:50
|
Новичок на форуме
|
|
Регистрация: 28.09.2017
Сообщений: 6
|
|
Генератор случайных чисел без повторений в последующих генерациях
Всем привет! Прошу помочь с одной задачей. Нужно сделать генератор случайных чисел из диапазона чисел, но так чтобы в последующих генерациях числа не повторялись, и чтобы можно было менять кол-во генерации значений. Генерация до тех пока числа не кончатся, потом заново генерация. Возможно ли как то реализовать это? - Ввели диапазон чисел
- Выбрали количество значений
- Нажали генерировать
- Числа сгенерировались и записалось в бд (12 5 7 23 8 9)
- Нажали генерировать
- Проверяются числа из уже сделанных предыдущих генераций (предыдущая генерация: 12 5 7 23 8 9)
- Генерируются числа которые еще не отображались (25 6 3 4 36 2)
- Вывод на экран (25 6 3 4 36 2)
- Кнопочка очистить значения чтобы начать заново
Пример:
Диапазон чисел: 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
Выделены цифры которые повторяются при последующей генерации
|
|
28.09.2017, 18:04
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Samik,
создали массив, перемешали, пока длина массива больше n, то return arr.splice(0,n) иначе ... ???
|
|
28.09.2017, 18:20
|
Новичок на форуме
|
|
Регистрация: 28.09.2017
Сообщений: 6
|
|
Сообщение от рони
|
Samik,
создали массив, перемешали, пока длина массива больше n, то return arr.splice(0,n) иначе ... ???
|
такс пока не въехал
|
|
28.09.2017, 18:26
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Samik
|
Диапазон чисел: 0-48
Количество значений за 1 генерацию: 6
|
что будет на 9-ой генерации?
|
|
28.09.2017, 18:47
|
Новичок на форуме
|
|
Регистрация: 28.09.2017
Сообщений: 6
|
|
Сообщение от рони
|
что будет на 9-ой генерации?
|
должно быть сокращение генерируемых чисел, после того как числа из диапазона 0-48 будут кончаться, то количество значений будет уменьшаться от 6 и до 0
|
|
28.09.2017, 18:57
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Samik,
не понимаю, что вы пишите. вопрос вроде простой: что будет на 9-ой генерации?
|
|
28.09.2017, 19:36
|
Новичок на форуме
|
|
Регистрация: 28.09.2017
Сообщений: 6
|
|
Сообщение от рони
|
Samik,
не понимаю, что вы пишите. вопрос вроде простой: что будет на 9-ой генерации?
|
Ну смотри:
диапазон: 0-10
Количество значений за 1 генерацию: 3
Генерация 1: 1 3 5
Генерация 2: 2 4 6
Генерация 3: 7 9 8
Генерация 4: 0 10
Генерация 5: уже ничего не будет генерировать
Если к 9ой генерации чисел из диапазона уже не останется то результата не будет, и нужно делать сброс чтобы начать с начала
|
|
28.09.2017, 20:05
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
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>
Последний раз редактировалось рони, 28.09.2017 в 20:53.
|
|
28.09.2017, 21:00
|
Новичок на форуме
|
|
Регистрация: 28.09.2017
Сообщений: 6
|
|
Сообщение от рони
|
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>
|
тестирую, а можно это обернуть так?
|
|
28.09.2017, 21:16
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
<!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>
|
|
|
|