From d6051158e52db719ae506fc48a45d22975b16a8b Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Wed, 23 Aug 2017 20:19:52 -0400 Subject: Implement again --- src/dice.js | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'src') 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 -- cgit v1.2.3