diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-23 20:19:52 -0400 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2017-08-23 20:19:52 -0400 |
commit | d6051158e52db719ae506fc48a45d22975b16a8b (patch) | |
tree | 43e16f3fe4e75bc48b99127cd834c1d74e0bf860 /src | |
parent | 6a323b30b3a4b80baec963b4308bd8d8d2a48ad9 (diff) |
Implement again
Diffstat (limited to 'src')
-rw-r--r-- | src/dice.js | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/dice.js b/src/dice.js index 6f3b7da..ef67edf 100644 --- a/src/dice.js +++ b/src/dice.js @@ -111,6 +111,43 @@ const keepLow = (die1, die2) => { } } +const again = (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 + } +} + + exports.pool = pool exports.roll = roll exports.constant = constant @@ -123,3 +160,4 @@ exports.negative = negative exports.explode = explode exports.keepHigh = keepHigh exports.keepLow = keepLow +exports.again = again |