Генератор случайных чисел без повторений в последующих генерациях
Всем привет! Прошу помочь с одной задачей. Нужно сделать генератор случайных чисел из диапазона чисел, но так чтобы в последующих генерациях числа не повторялись, и чтобы можно было менять кол-во генерации значений. Генерация до тех пока числа не кончатся, потом заново генерация. Возможно ли как то реализовать это?
Пример: Диапазон чисел: 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, время: 20:31. |