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
|
|
|
}
|
2022-02-18 12:24:25 +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
|
|
|
|
}
|