diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-23 21:26:01 -0400 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-23 21:26:01 -0400 |
commit | 5bb027bde84e0a8fdb01bfa680b511ad842498ef (patch) | |
tree | 50c5c31b11986927f165f14804376ed6506ca609 | |
parent | 51748970426496823600522f5cfda65240d6e6e8 (diff) |
Implement threshold
-rw-r--r-- | __tests__/dice.test.js | 25 | ||||
-rw-r--r-- | src/dice.js | 17 |
2 files changed, 41 insertions, 1 deletions
diff --git a/__tests__/dice.test.js b/__tests__/dice.test.js index a18584c..12d9130 100644 --- a/__tests__/dice.test.js +++ b/__tests__/dice.test.js @@ -10,7 +10,8 @@ const { explode, keepHigh, keepLow, - again + again, + threshold } = require('../src/dice.js') const defaultNumberRolls = 500 @@ -560,3 +561,25 @@ describe('again', () => { }) }) }) + +describe('threshold', () => { + describe('8T3d10', () => { + const die = threshold(constant(8), d(constant(3), constant(10))) + + testDie(die, { + diceCount: 3, + average: { + average: 0.9 + }, + variance: { + variance: 0.63 + }, + bounds: { + low: 0, + high: 3, + expectLow: true, + expectHigh: true + } + }) + }) +}) diff --git a/src/dice.js b/src/dice.js index ef67edf..9bc53d7 100644 --- a/src/dice.js +++ b/src/dice.js @@ -147,6 +147,22 @@ const again = (die1, die2) => { } } +const threshold = (die1, die2) => { + return () => { + const cutoff = roll(die1) + + return die2().map(die => { + return () => { + if (die() >= cutoff) { + return 1 + } else { + return 0 + } + } + }) + } +} + exports.pool = pool exports.roll = roll @@ -161,3 +177,4 @@ exports.explode = explode exports.keepHigh = keepHigh exports.keepLow = keepLow exports.again = again +exports.threshold = threshold |