Draw Code used by Flicker

Lottery Win Probabilities

How Dem Play Dis Game

For dis lottery system, dem go draw 10 numbers randomly from 1 to 49. Players go pick 5 numbers, and dem go give prize based on how many numbers match wetin dem draw.

How Dem Share Prize Money

  • To win any prize, you must match 3 numbers as minimum.
  • If one person win with 5 matches, dem go collect 100% of di allocated SUPER JACKPOT.
  • If na only 1 winner get 4+ matches, dem go collect 100% of di allocated JACKPOT prize.
  • If 2 winners get 4+ matches, dem go share di prize 62.5%/37.5%.
  • For 3-match winners, only 50% of di total money go allocate, and dem go share am 30%/15%/5% for 1st/2nd/3rd place respectively.

Dis one make di game get one kain way, wey big prizes no dey too common, but small wins dey happen more often.

How Dem Calculate Chance

Di chance P(k) to match exact k numbers out of 5 na dis formula dem use:

P(k) = [C(5,k) × C(44,10-k)] / C(49,10)

Wetin dis one mean:
• C(n,k) na combinations (how many ways to choose k things from n things)
• 5 na di number of numbers wey player pick
• 10 na di number of winning numbers dem draw
• 49 na di total number of possible numbers

Analysis of Chance Calculation

Hypergeometric Distribution Formula

P(k) = [C(5,k) × C(44,10-k)] / C(49,10)

3 Matches

P(3) = [C(5,3) × C(44,7)] / C(49,10)

= (10 × 38,608,020) / 8,217,822,536

≈ 386,080,200 / 8,217,822,536

≈ 0.04698 ≈ 1 in 21.28

4 Matches

P(4) = [C(5,4) × C(44,6)] / C(49,10)

= (5 × 7,059,052) / 8,217,822,536

≈ 35,295,260 / 8,217,822,536

≈ 0.004295 ≈ 1 in 233

5 Matches (SUPER JACKPOT)

P(5) = [C(5,5) × C(44,5)] / C(49,10)

= (1 × 1,086,008) / 8,217,822,536

≈ 1,086,008 / 8,217,822,536

≈ 0.000132 ≈ 1 in 7,566

Overall Chance to Win (≥3 Matches)

P(win) = P(3) + P(4) + P(5)

≈ 0.04698 + 0.004295 + 0.000132

≈ 0.0514 ≈ 1 in 19.45

Dis mean say player get about 5.14% chance to win any prize.

Wetin Dem See

  • Di real jackpot odds (5 matches) na 1 in 7,566
  • Di chance to win any prize (≥3 matches) na 1 in 19.45

The method used for Draw

            
              /**               
               * Generates an array of unique random integers within a specified range in sorted order.
               *
               * Performed daily for draws with parameters of generateUniqueRandomSortedIntegers(10, 1, 49)
               *
               *
               * @param {number} count - The number of unique integers to generate (must be positive)
               * @param {number} min - The lower bound of the range (inclusive)
               * @param {number} max - The upper bound of the range (inclusive)
               * @returns {number[]} A sorted array of unique random integers
               * @throws {Error} If the requested count exceeds the possible unique values in the range
               * or if any parameter is invalid
               */
              function generateUniqueRandomSortedIntegers(count, min, max) {
                // Validate input parameters
                if (!Number.isInteger(count) || !Number.isInteger(min) || !Number.isInteger(max)) {
                  throw new Error("All parameters must be integers");
                }

                if (count <= 0) {
                  throw new Error("Count must be a positive integer");
                }

                if (min > max) {
                  throw new Error("Minimum value cannot exceed maximum value");
                }

                const rangeSize = max - min + 1;
                if (count > rangeSize) {
                  throw new Error(`Cannot generate ${count} unique numbers in range [${min}, ${max}]`);
                }

                // For small ranges relative to count, use Fisher-Yates shuffle algorithm
                if (count > rangeSize / 2) {
                  const allNumbers = Array.from({length: rangeSize}, (_, i) => min + i);

                  // Fisher-Yates shuffle
                  for (let i = allNumbers.length - 1; i > 0; i--) {
                    const j = Math.floor(Math.random() * (i + 1));
                    [allNumbers[i], allNumbers[j]] = [allNumbers[j], allNumbers[i]];
                  }

                  return allNumbers.slice(0, count).sort((a, b) => a - b);
                }

                // For larger ranges relative to count, use Set approach
                const uniqueNumbers = new Set();
                while (uniqueNumbers.size < count) {
                  const randomNumber = Math.floor(Math.random() * rangeSize) + min;
                  uniqueNumbers.add(randomNumber);
                }

                return Array.from(uniqueNumbers).sort((a, b) => a - b);
              }