How to generate 7 random numbers out of 33 (1-33) in TypeScript

1 Answer

0 votes
/**
 * Generates a specified number of unique random numbers
 * from the range 1..maxNumber.
 *
 * @param count Number of values to generate.
 * @param maxNumber Maximum value in the range (inclusive).
 * @returns Array of unique random numbers.
 * @throws Error if count is invalid.
 */
function generateRandomNumbers(
    count: number,
    maxNumber: number
): number[] {
    if (count < 1) {
        throw new Error("count must be greater than 0");
    }

    if (count > maxNumber) {
        throw new Error("count cannot be greater than maxNumber");
    }

    // Create array: [1, 2, 3, ..., maxNumber]
    const numbers: number[] = Array.from(
        { length: maxNumber },
        (_, index: number): number => index + 1
    );

    // Fisher-Yates shuffle
    for (let i: number = numbers.length - 1; i > 0; i--) {
        const j: number = Math.floor(
            Math.random() * (i + 1)
        );

        // Swap elements
        [numbers[i], numbers[j]] = [numbers[j], numbers[i]];
    }

    // Return the first 'count' numbers
    return numbers.slice(0, count);
}

// Example usage
const picks: number[] = generateRandomNumbers(7, 33);

// Optional: sort ascending for lottery-style output
picks.sort((a: number, b: number): number => a - b);

console.log("Random numbers:", picks);


/*
run:

Random numbers: [
   1,  7, 14, 18,
  19, 21, 32
]

*/

 



answered Oct 28 by avibootz
...