From 129a07c5d92e7b1c788abd6012230273149df627 Mon Sep 17 00:00:00 2001 From: Gekctek Date: Sun, 14 Jan 2024 13:35:34 -0800 Subject: [PATCH] Add random element selection functions to PseudoRandomX module --- src/PseudoRandomX.mo | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/PseudoRandomX.mo b/src/PseudoRandomX.mo index 13ed834..9ee0b1b 100644 --- a/src/PseudoRandomX.mo +++ b/src/PseudoRandomX.mo @@ -66,6 +66,24 @@ module Module { return randomValue <= trueCount; }; + public func nextBufferElement(buffer : Buffer.Buffer) : T { + let bufferSize = buffer.size(); + if (bufferSize == 0) { + Debug.trap("Cannot get random element from empty buffer"); + }; + let randomIndex = nextNat(0, bufferSize - 1); + buffer.get(randomIndex); + }; + + public func nextArrayElement(array : [T]) : T { + let arraySize = array.size(); + if (arraySize == 0) { + Debug.trap("Cannot get random element from empty buffer"); + }; + let randomIndex = nextNat(0, arraySize - 1); + array[randomIndex]; + }; + public func shuffleBuffer(buffer : Buffer.Buffer) { let bufferSize = buffer.size(); if (bufferSize == 0) { @@ -75,10 +93,10 @@ module Module { var i : Nat = bufferSize; for (item in buffer.vals()) { i -= 1; - let randIdx = nextNat(0, i); + let randomIndex = nextNat(0, i); let temp = buffer.get(i); - buffer.put(i, buffer.get(randIdx)); - buffer.put(randIdx, temp); + buffer.put(i, buffer.get(randomIndex)); + buffer.put(randomIndex, temp); }; }; };