Lotto Numbers Generator
by Eugene Vilder
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/seedrandom/3.0.1/seedrandom.min.js"></script>
<h2 id='result'></h2>
<h3>Good Luck :)</h3>
<div id='buttons'></div>
<small id='timer'></small>
CSS
button {
padding: 1em 2em;
cursor: pointer;
border-radius: .5em;
color: #FFF;
}
button.lottoMax {
background: #84BD00;
}
button.six49 {
background: #0C4D8C;
}
button.grand {
background: #F6A202;
}
button:disabled {
opacity: .5;
}
small {
display: block;
margin-top: 1em;
}
JavaScript
const randomNumber = new Math.seedrandom('added entropy.', { entropy: true });
let startRunTime = 0;
let endRunTime = 0;
const games = {
lottoMax: {
pick: 7,
maxNumber: 50,
grandNumber: false,
title: 'Lotto MAX',
possibleVariants: 33294800
},
six49: {
pick: 6,
maxNumber: 49,
grandNumber: false,
title: 'Lotto 6/49',
possibleVariants: 13983816
},
grand: {
pick: 5,
maxNumber: 49,
grandNumber: true,
title: 'Lotto Grand',
possibleVariants: 13348188
}
}
for (let gameType in games){
const button = document.createElement("button");
button.className = gameType;
button.innerHTML = games[gameType].title;
button.setAttribute('name', gameType);
button.addEventListener('click', runGame);
document.getElementById("buttons").appendChild(button);
}
function runGame(e){
run(e.target.name);
}
function generateVariants (gameType) {
const MIN = 1, MAX = games[gameType].maxNumber;
const variants = {}, grands = {};
for (let i=0; i < games[gameType].possibleVariants; i++) {
for (let i=0; i < games[gameType].pick-1; i++) {
const num = Math.floor(randomNumber() * MAX + MIN);
variants[num] = variants[num] || 0;
variants[num]++;
}
}
if (games[gameType].grandNumber) {
for (let i=0; i < games[gameType].possibleVariants; i++) {
const num = Math.floor(randomNumber() * 7 + 1);
grands[num] = grands[num] || 0;
grands[num]++;
}
}
return {variants, grands};
}
function generateLuckyNumbers(gameType){
const sortable = [], sortableGrands = [];
const {variants, grands} = generateVariants(gameType);
for (var key in variants) {
sortable.push([key, variants[key]]);
}
for (var key in grands) {
sortableGrands.push([key, grands[key]]);
}
endRunTime = new Date().getTime();
document.getElementById('timer').innerHTML = 'Run time: ' + (endRunTime - startRunTime) / 1000 + ' sec';
const numbersResult =...