Skip to content

Instantly share code, notes, and snippets.

@shaefer
Created June 5, 2018 21:11
Show Gist options
  • Save shaefer/72198a60da384909be8a97d8d6f4cd4e to your computer and use it in GitHub Desktop.
Save shaefer/72198a60da384909be8a97d8d6f4cd4e to your computer and use it in GitHub Desktop.
DiceBag Phase 3
import seedrandom from 'seedrandom'
import {sum} from './ArrayUtils'
const rollDice = (numOfDice, numOfSides, generator = Math.random) => {
if (numOfDice > 100000) throw new Exception("Max dice of 10000 exceeded");
if (numOfSides > 100000) throw new Exception("Max sides of 10000 exceeded");
let results = [];
for (let i = 1; i<= numOfDice; i++) {
const result = Math.floor(generator() * numOfSides) + 1;
results.push(result);
}
return {
total: sum(results),
individualResults: results
};
}
export const DiceBag = (generator = Math.random) => {
return {
d6: () => {
return rollDice(1, 6, generator);
},
rollDice: (numOfDice, numOfSides) => {
return rollDice(numOfDice, numOfSides, generator);
},
sum: sum
};
}
export const DiceBagWithSeed = (seed) => {
const generator = new seedrandom(seed);
let diceBag = DiceBag(generator);
diceBag.seed = seed;
return diceBag;
}
export default DiceBag;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment