Files
gcf-practice/src/prob.ts

17 lines
552 B
TypeScript

namespace Prob {
export type Probability<T> = [ number, T ]
type NonEmptyArray<T> = [ T, ...T[] ]
export type ProbabilitySet<T> = NonEmptyArray<Probability<T>>
export const chooseRandom = <T>(probabilities : ProbabilitySet<T>) : 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