28 wiersze
735 B
TypeScript
28 wiersze
735 B
TypeScript
|
/**
|
||
|
* Return a probability distribution of the given Array.
|
||
|
*
|
||
|
* Each item may be repeated more than once in the return value,
|
||
|
* making it more likely for the item to be randomly chosen.
|
||
|
*
|
||
|
* @param items The list of items to create a distribution from.
|
||
|
*
|
||
|
* @param getFrequencyMultiplier A function that takes an item
|
||
|
* and returns a positive integer specifying how many times
|
||
|
* it should be included in the distribution.
|
||
|
*/
|
||
|
export function createDistribution<T>(
|
||
|
items: T[],
|
||
|
getFrequencyMultiplier: (item: T) => number
|
||
|
) {
|
||
|
const result: T[] = [];
|
||
|
|
||
|
for (let item of items) {
|
||
|
const freq = getFrequencyMultiplier(item);
|
||
|
for (let i = 0; i < freq; i++) {
|
||
|
result.push(item);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result;
|
||
|
}
|