Skip to content

Instantly share code, notes, and snippets.

@annibal
Created April 1, 2024 20:36
Show Gist options
  • Save annibal/7a3ad12215cfd827fde955f6197c2c80 to your computer and use it in GitHub Desktop.
Save annibal/7a3ad12215cfd827fde955f6197c2c80 to your computer and use it in GitHub Desktop.
Some Random utility functions
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