diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-30 16:30:23 -0400 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-30 16:30:23 -0400 |
commit | 5b77a409c912f7251da8c170bd4a3aa8826d989b (patch) | |
tree | 0b3131a6a1c87b7a3af3537d4d548392866bb812 /src/dice.js | |
parent | 7efea0582dda35cd7dc0c370ef3b56c84b2f2291 (diff) |
Implement again under
Diffstat (limited to 'src/dice.js')
-rw-r--r-- | src/dice.js | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/dice.js b/src/dice.js index e96aca9..e580c9d 100644 --- a/src/dice.js +++ b/src/dice.js @@ -162,6 +162,42 @@ const again = (die1, die2) => { } } +const againUnder = (die1, die2) => { + return () => { + const againOn = roll(die1) + let rolls = [] + let rollAgain = [] + + const rollDie = (die) => { + const roll = die() + + if (roll <= againOn) { + rollAgain.push(die) + } + + let returnedOriginal = false + rolls.push(() => { + if (!returnedOriginal) { + returnedOriginal = true + return roll + } else { + return die() + } + }) + } + + die2().forEach(rollDie) + + while (rollAgain.length > 0) { + const oldRollAgain = rollAgain + rollAgain = [] + oldRollAgain.forEach(rollDie) + } + + return rolls + } +} + const threshold = (die1, die2) => { return () => { const cutoff = roll(die1) @@ -193,4 +229,5 @@ exports.explodeUnder = explodeUnder exports.keepHigh = keepHigh exports.keepLow = keepLow exports.again = again +exports.againUnder = againUnder exports.threshold = threshold |