From 7efea0582dda35cd7dc0c370ef3b56c84b2f2291 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Wed, 30 Aug 2017 16:25:34 -0400 Subject: Implement explode under --- src/dice.js | 16 ++++++++++++++++ src/lexer.js | 1 + src/parser.js | 1 + 3 files changed, 18 insertions(+) (limited to 'src') diff --git a/src/dice.js b/src/dice.js index 9bc53d7..e96aca9 100644 --- a/src/dice.js +++ b/src/dice.js @@ -73,6 +73,21 @@ const explode = (die1, die2) => { } } +const explodeUnder = (die1, die2) => { + return () => { + const explodeOn = roll(die1) + return die2().map(die => () => { + let lastRoll = die() + let total = lastRoll + while (lastRoll <= explodeOn) { + lastRoll = die() + total += lastRoll + } + return total + }) + } +} + const keepHigh = (die1, die2) => { return () => { const numberToKeep = roll(die1) @@ -174,6 +189,7 @@ exports.bonusAdd = bonusAdd exports.bonusSubtract = bonusSubtract exports.negative = negative exports.explode = explode +exports.explodeUnder = explodeUnder exports.keepHigh = keepHigh exports.keepLow = keepLow exports.again = again diff --git a/src/lexer.js b/src/lexer.js index f316147..7eb95b0 100644 --- a/src/lexer.js +++ b/src/lexer.js @@ -23,6 +23,7 @@ newLexemeType('minus', '-') newLexemeType('(', '\\(') newLexemeType(')', '\\)') newLexemeType('E', 'E') +newLexemeType('e', 'e') newLexemeType('K', 'K') newLexemeType('k', 'k') newLexemeType('A', 'A') diff --git a/src/parser.js b/src/parser.js index 0201d05..124d686 100644 --- a/src/parser.js +++ b/src/parser.js @@ -61,6 +61,7 @@ newSymbol('d', (parser) => { } }) newDieOperation('E') +newDieOperation('e') newDieOperation('K') newDieOperation('k') newDieOperation('A') -- cgit v1.2.3