Created
April 1, 2024 20:36
-
-
Save annibal/7a3ad12215cfd827fde955f6197c2c80 to your computer and use it in GitHub Desktop.
Some Random utility functions
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function randomRange(min=0, max=100, dec=0) { | |
const mag = 10 ** dec; | |
return Math.floor( (Math.random() * (max - min) + min) * mag ) / mag; | |
} | |
function randomLetter(uppercase = false) { | |
return String.fromCharCode(randomRange(uppercase ? 65 : 97, uppercase ? 90 : 122)) | |
} | |
function randomString(minLength=8, maxLength=16) { | |
return Array(randomRange(minLength, maxLength)).fill().map((_,i) => randomLetter(i === 0)).join("") | |
} | |
function randomSentence(min=8, max=32) { | |
return Array(randomRange(min, max)).fill().map((_,i) => randomString(2, 18)).join(" ") | |
} | |
function randomElement(elementsArray, weightsArray) { | |
let elms = Array.isArray(elementsArray) ? elementsArray : []; | |
let weights = weightsArray; | |
if (!Array.isArray(weightsArray)) { | |
weights = Array(elms.length).fill(1) | |
} | |
elms = elms.map((elm, i) => { | |
let qtd = parseInt(weights[i]); | |
if (qtd == null || isNaN(qtd)) { | |
qtd = 1; | |
} | |
return Array(qtd).fill(elm); | |
}).flat() | |
const idx = randomRange(0, elms.length, 0) | |
return elms[idx]; | |
} | |
function _testRandomFn(method, inputs=[], iterations=10**6) { | |
const results = { | |
min: Infinity, | |
max: -Infinity, | |
average: 0, | |
outputs: {}, | |
} | |
for (let i = 0; i < iterations; i += 1) { | |
const val = method(...inputs); | |
results.min = Math.min(val, results.min); | |
results.max = Math.max(val, results.max); | |
results.average += val; | |
if (results.outputs[val] === undefined) { | |
results.outputs[val] = { | |
count: 0, | |
percent: 0 | |
} | |
} | |
results.outputs[val].count += 1; | |
} | |
results.average = results.average / iterations | |
Object.keys(results.outputs).forEach((key) => { | |
results.outputs[key].percent = results.outputs[key].count / iterations | |
}) | |
return results; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment