Lottery Generator

by antyrat

HTML

<label for="exclude">Exclude</label>
<input type="text" id="exclude" placeholder="Exclude">
<label for="n">Numbers in a row</label>
<input type="number" id="n" value="6" min="5">
<label for="iter">How much?</label>
<input type="number" id="iter" value="1" min="1">
<label for="max">Max number</label>
<select id="max">
  <option value="52">52</option>
  <option value="45">45</option>
</select>
<input type="button" id="generate" value="Generate">
<div id="result"></div>

CSS

label {
  display: block;
}

#result {
  margin-top: 20px;
}

JavaScript

const getById = id => document.getElementById(id);
const val = id => getById(id).value;
const valN = val => parseInt(val, 10);
const random = max => Math.ceil(Math.random() * max);

getById('generate').addEventListener('click', () => {
  const exclude = val('exclude').split(',').map(val => valN(val));
  const n = valN(val('n'));
  const iter = valN(val('iter'));
  const maxNode = getById('max');
  const max = valN(maxNode.options[maxNode.selectedIndex].value);
  let results = [];

  for (let i = 0; i < iter; i++) {
    let result = [];
    while (result.length < n) {
      let ran = random(max);
      if (result.includes(ran) || exclude.includes(ran)) {
        continue;
      }
      result.push(ran);
    }
    results.push(result.sort((a, b) => a > b));
  }

  getById('result').innerHTML = '';

  results.forEach((result) => {
    const div = document.createElement('div');
    const resultString = result.map((val) => val < 10 ? '0' + val : val);
    resultString.forEach((val) => {
      div.innerHTML += val + ' ';
    })
    getById('result').appendChild(div);
  });
}, false);