namespace Prob { export type Probability = [ number, T ] type NonEmptyArray = [ T, ...T[] ] export type ProbabilitySet = NonEmptyArray> export const chooseRandom = (probabilities : ProbabilitySet) : T => { let r = Math.random(), accum = 0 for (let i = 0; i < probabilities.length; i++) { if ((r >= accum) && (r < accum + probabilities[i][0])) return probabilities[i][1] accum += probabilities[i][0] } return probabilities[probabilities.length - 1][1] } } export default Prob