logo hsb.horse
← Zur Blog-Übersicht

Blog

Lotto-6- und Lotto-7-Zahlen in TypeScript erzeugen

Eine TypeScript-Implementierung, die mit dem Mersenne Twister Lotto-6- und Lotto-7-Zahlen erzeugt. Ein praktisches Beispiel für einen Pseudozufallszahlengenerator.

Veröffentlicht:

Ich habe zum Spaß einen kleinen Generator für Lotto-6- und Lotto-7-Zahlen gebaut.

Implementierung

function generateLottoNumbers(lot: 6 | 7): number[] {
if (![6, 7].includes(lot)) {
throw new Error('引数は6または7である必要があります');
}
const { random } = createMersenneTwister();
const min = 1, max = lot === 6 ? 43 : 37
const numbers = new Set<number>();
while (numbers.size < lot) {
numbers.add(Math.floor(random() * (max - min + 1)) + min);
}
return [...numbers];
}

Mersenne-Twister-Implementierung

export function createMersenneTwister(seed: number = new Date().getTime()) {
let index = 624;
const MT = new Array(624);
MT[0] = seed;
for (let i = 1; i < 624; i++) {
MT[i] = (1812433253 * (MT[i - 1] ^ (MT[i - 1] >>> 30)) + i) >>> 0;
}
function generateNumbers() {
for (let i = 0; i < 624; i++) {
const y = (MT[i] & 0x80000000) + (MT[(i + 1) % 624] & 0x7fffffff);
MT[i] = MT[(i + 397) % 624] ^ (y >>> 1);
if (y % 2 !== 0) {
MT[i] ^= 2567483615;
}
}
}
function random() {
if (index >= 624) {
generateNumbers();
index = 0;
}
let y = MT[index++];
y ^= (y >>> 11);
y ^= (y << 7) & 2636928640;
y ^= (y << 15) & 4022730752;
y ^= (y >>> 18);
return (y >>> 0) / 4294967296;
}
return { random };
}

Wichtige Punkte

  • Set: erzeugt eindeutige Zahlen ohne Duplikate
  • Mersenne Twister: hochwertiger Pseudozufallszahlengenerator
  • Bereich: Lotto 6 nutzt 1-43, Lotto 7 nutzt 1-37

Zusammenfassung

Mit dem Mersenne Twister lassen sich qualitativ bessere Zufallszahlen als mit Math.random() erzeugen.

Ob das bei einer echten Ziehung hilft, ist eine andere Frage. Als Übung zur Implementierung eines Pseudozufallsalgorithmus ist es aber ein gutes Beispiel.