Генератор случайных чисел
Задача состоит в том, чтобы написать свой генератор случайных чисел, то есть класс Random исключаем. Кое-что реализовал, вот код:
function getRandonNumber() {
var now = new Date(); // берем текущую дату и время
var hours = now.getHours(); // Извлекаем часы
var minutes = now.getMinutes(); // Извлекаем минуты
var seconds = now.getSeconds(); // Извлекаем секунды клики
var milliseconds = (hours * 3600000) + (minutes * 60000) + (seconds * 1000) + now.getMilliseconds(); // Получаем миллисекунды
var result = milliseconds % 100;
document.getElementById("for-word").innerHTML = "Случайное число: " + result;
}
Данные метод генерирует случайное число от 0 до 99. Сейчас я не могу понять, как сделать так, чтобы числа были в диапазоне от 15 до 99. Как это сделать?
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Как-то так
function getRandonNumber() {
var now = new Date().getTime();
var result = now % 85 + 15;
console.log("Случайное число: " + result);
}
<button id="random" onClick="return getRandonNumber();">get random</button>
Автор решения: vp_arth
→ Ссылка
Можно что-нибудь такое изобразить)
function getRandom() {
const m = 4294967296;
let value;
const gen = () => value = (64525 * value + 1013904223) % m;
gen.seed = v => value = v % m;
gen.seed(Date.now());
return gen;
}
const getRandomNumber = getRandom();
const getRandomInt = (min, max) => getRandomNumber() % (max-min+1) + min;
// Генерация 25 чисел
const lst = []
for (let i = 0; i < 25; ++i) {
lst.push(getRandomInt(15, 99))
}
console.log(lst.join());
// Демонстрация приемлемой равномерности =)
const map = {}
for (let i = 0; i < 100000; ++i) {
const r = getRandomInt(15, 99);
map[r] = (map[r] || 0) + 1;
}
console.log(map);
// Демонстрация посева зерна
let same = [], seed = Date.now();
getRandomNumber.seed(seed); same.push(getRandomInt(1, 100));
getRandomNumber.seed(seed); same.push(getRandomInt(1, 100));
getRandomNumber.seed(seed); same.push(getRandomInt(1, 100));
console.log(same.join());