| 
	| 
	
	| 
		
	| 
			
			 
			
				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,150
					 
		
 |  |  
	| 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,150
					 
		
 |  |  
	| 
	
 
	| Сообщение от 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,150
					 
		
 |  |  
	| 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,150
					 
		
 |  |  
	| 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>
 |  |  |  |