Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Генератор случайных чисел без повторений в последующих генерациях (https://javascript.ru/forum/misc/70730-generator-sluchajjnykh-chisel-bez-povtorenijj-v-posleduyushhikh-generaciyakh.html)

рони 28.09.2017 21:36

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>

Samik 28.09.2017 21:59

Цитата:

Сообщение от j0hnik (Сообщение 465904)
<!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>

он сам считает получается сколько осталось цифр? но вот вопрос, при вводе другого диапазона даже после сброса он не считает уже например написав от 4 до 10 по 3 генерации

j0hnik 29.09.2017 01:11

<!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>

поправил, теперь автоматом будет обновляться

Masunsa 11.03.2023 23:59

А как можно сделать чтобы до каждой последующей генерации учитывалось количество чисел? Например при первой генерации нужно 3 числа, а при последующей уже 7 чисел например.

рони 12.03.2023 00:35

количество случайных чисел
 
Цитата:

Сообщение от Masunsa
Например при первой генерации нужно 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, время: 18:42.