/**
* 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
]
*/