Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Нужен генератор случайных чисел без Math.random (https://javascript.ru/forum/study/72660-nuzhen-generator-sluchajjnykh-chisel-bez-math-random.html)

Kirill_98 16.02.2018 13:28

Цитата:

Сообщение от рони (Сообщение 478360)
недостаточно информации

http://stratum.ac.ru/education/textb...lection22.html

в статье есть метод перемешивания скорей всего это оно и есть, и еще одно данная статья использовалась у меня на предмете

j0hnik 16.02.2018 16:25

почитал вашу статью, всю математику можно переменить в JS , но чем генерировать 1 и 0 ? из того что нашел в статье и применимо в целом к JS это подкидывать монетку, вбивать в input значения, например 1-орел, 0-решка, и пропускать через вашу формулу. или другой подобный тому нехитрый метод.

Kirill_98 16.02.2018 17:40

Цитата:

Сообщение от j0hnik (Сообщение 478397)
почитал вашу статью, всю математику можно переменить в JS , но чем генерировать 1 и 0 ? из того что нашел в статье и применимо в целом к JS это подкидывать монетку, вбивать в input значения, например 1-орел, 0-решка, и пропускать через вашу формулу. или другой подобный тому нехитрый метод.

а как это реализовать ?

Белый шум 16.02.2018 17:49

Цитата:

Сообщение от j0hnik
почитал вашу статью, всю математику можно переменить в JS , но чем генерировать 1 и 0 ?

Читать надо только про метод перемешивания. Начальное значение, видимо, нужно задавать отдельно.

рони 16.02.2018 17:56

Цитата:

про метод перемешивания
не смог создать цепочку длиннее 4 , примерно так 50,84,102,50,84,102,50,84,102,50,84,102,50,84,102, 50,84,102,50,84,102,50,84,102,50,84,102,
кто сделает больше?

Белый шум 16.02.2018 20:14

<head>
  <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script>
  <style>
      .c0 {color:blueviolet;}
      .c1 {//color:red;}
      .c0, .c1 { position:relative; font-family:monospace;}
      .bits {color:brown; position:absolute; left:100pt;}
  </style>
</head>
<body>
  <button id="b">ещё</button> (<span id="num">0</span>)
  <div id="r"></div>
  <script>
	var r0 = 285017901, clr = true, cnt = num = 0;

	function random() {
//console.log('r0:', r0.toString(2).padStart(32, '0'));
		var left = ((parseInt('01111111110000000000000000000000', 2) & r0) >>> 23);
		var r1 = (r0 << 10 >>> 1) | left;
//console.log('r1:', r1.toString(2).padStart(32, '0'));

		var right = ((parseInt('111111111', 2)) & r0) << 24 >>> 1;
		var r2 = (r0 >>> 9) | right;
//console.log('r2:', r2.toString(2).padStart(32, '0'));

		r0 = r1 + r2;
		$('#r').prepend($('<div>'+r0+'	 <span class="bits">'+ (r0.toString(2).padStart(32, '0')) +'</span>'+'</div>').addClass('c'+Number(clr)));
		//console.log('r0:', r0.toString(2));

		if(++cnt >= 5) {
			clr = !clr;
		 	cnt = 0;
		}
		$('#num').text(++num);
	}
	$('#b').on('click', random);
  </script>
</body>

рони 16.02.2018 21:09

Белый шум,
:)

Kirill_98 16.02.2018 21:27

Цитата:

Сообщение от Белый шум (Сообщение 478409)
<head>
  <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script>
  <style>
      .c0 {color:blueviolet;}
      .c1 {//color:red;}
      .c0, .c1 { position:relative; font-family:monospace;}
      .bits {color:brown; position:absolute; left:100pt;}
  </style>
</head>
<body>
  <button id="b">ещё</button> (<span id="num">0</span>)
  <div id="r"></div>
  <script>
	var r0 = 285017901, clr = true, cnt = num = 0;

	function random() {
		var left = ((parseInt('11111111100000000000000000000000', 2) & r0) >> 23);
		var r1 = (r0 << 10 >>> 1) | left;

		var right = (parseInt('111111111', 2)) & r0;
		var r2 = (r0 >>> 9) | right;

		r0 = r1 + r2;
		$('#r').prepend($('<div>'+r0+'	 <span class="bits">'+ (r0.toString(2).padStart(32, '0')) +'</span>'+'</div>').addClass('c'+Number(clr)));
		//console.log('r0:', r0.toString(2));

		if(++cnt >= 5) {
			clr = !clr;
		 	cnt = 0;
		}
		$('#num').text(++num);
	}
	$('#b').on('click', random);
  </script>
</body>

пожалуйста можете объяснить как работает код ? И еще у меня он почему то не работает
jquery-1.9.1.js Failed to load resource: net::ERR_FILE_NOT_FOUND
rand.html:34 Uncaught ReferenceError: $ is not defined
at rand.html:34
после того как добавил <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
rand.html:25 Uncaught TypeError: r0.toString(...).padStart is not a function
at HTMLButtonElement.random (rand.html:25)
at HTMLButtonElement.dispatch (jquery-1.9.1.js:3074)
at HTMLButtonElement.elemData.handle (jquery-1.9.1.js:2750)

Белый шум 16.02.2018 22:00

Kirill_98,
Удали падстарт либо обнови браузер -
https://developer.mozilla.org/ru/doc...tring/padStart

А работает он в соответствии с алгоритмом по твоей ссылке, только я взял смещение в 9 бит (в js числа 32-битные ЕЯПО, минус 1 бит на знак).

Белый шум 16.02.2018 22:20

Вернее, немного не соответствовал. Сейчас поправил, теперь должен соответствовать вроде. С цифирками можно поиграться, если где-то накосячил (я просто сам принцип проверял, а не домашку за студента делал).


Часовой пояс GMT +3, время: 22:18.