17 lines
552 B
TypeScript
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
|