n0mbers/src/utils.ts

39 lines
867 B
TypeScript
Raw Normal View History

2022-02-07 22:14:31 +01:00
/**
*
* @param min inclusive
* @param max exclusive
* @returns
*/
2022-02-09 22:10:58 +01:00
export function randRange(min: number, max: number, rnd = Math.random): number {
return Math.floor(rnd() * (max - min) + min)
}
export function randItem<T>(items: T[], rnd = Math.random): T {
return items[Math.floor(rnd() * items.length)]
2022-02-07 22:14:31 +01:00
}
/**
* Shuffles an array in place and returns it
* @param array
* @returns
*/
export function shuffle<T>(array: T[]): T[] {
let currentIndex = array.length
let randomIndex
// While there remain elements to shuffle...
while (currentIndex !== 0) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex)
currentIndex--
// And swap it with the current element.
;[array[currentIndex], array[randomIndex]] = [
array[randomIndex],
array[currentIndex],
]
}
return array
}