diff --git a/src/PseudoRandomX.mo b/src/PseudoRandomX.mo index e81b2cf..a78f0e3 100644 --- a/src/PseudoRandomX.mo +++ b/src/PseudoRandomX.mo @@ -22,6 +22,7 @@ module Module { nextBufferElement : (buffer : Buffer.Buffer) -> T; nextArrayElement : (array : [T]) -> T; nextArrayElementWeighted : (array : [(T, Float)]) -> T; + nextArrayElementWeightedFunc : (array : [T], weightFunc : (T) -> Float) -> T; shuffleBuffer : (buffer : Buffer.Buffer) -> (); }; @@ -153,6 +154,14 @@ module Module { Prelude.unreachable(); }; + public func nextArrayElementWeightedFunc(array : [T], weightFunc : (T) -> Float) : T { + let weightedArray = Array.map( + array, + func(item : T) : (T, Float) = (item, weightFunc(item)), + ); + nextArrayElementWeighted(weightedArray); + }; + public func shuffleBuffer(buffer : Buffer.Buffer) { let bufferSize = buffer.size(); if (bufferSize == 0) {