/** * * @param min inclusive * @param max exclusive * @returns */ export function randRange(min: number, max: number, rnd = Math.random): number { return Math.floor(rnd() * (max - min) + min) } export function randItem(items: T[], rnd = Math.random): T { return items[Math.floor(rnd() * items.length)] } /** * Shuffles an array in place and returns it * @param array * @returns */ export function shuffle(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 }