From 2cb52a925df0563399f1a9cef8888fa0492492b7 Mon Sep 17 00:00:00 2001 From: siiky Date: Mon, 20 Nov 2023 18:08:11 +0000 Subject: [PATCH] refactor: simplify `solutionToOriginalUnits()` --- lib/bill-math.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/lib/bill-math.js b/lib/bill-math.js index c423e1c5..0fad0933 100644 --- a/lib/bill-math.js +++ b/lib/bill-math.js @@ -123,17 +123,20 @@ const getSolution = (units, amount, mode) => { } const solutionToOriginalUnits = (solution, units) => { - const billsLeft = _.clone(_.fromPairs(_.map(it => [it.denomination, it.provisioned])(solution))) - return _.reduce( - (acc, value) => { - const unit = units[value] - const billsToAssign = _.clamp(0, unit.count)(_.isNaN(billsLeft[unit.denomination]) || _.isNil(billsLeft[unit.denomination]) ? 0 : billsLeft[unit.denomination]) - acc.push({ name: unit.name, denomination: unit.denomination, provisioned: billsToAssign }) - billsLeft[unit.denomination] -= billsToAssign - return acc + const billsToAssign = (count, left) => _.clamp(0, count)(_.isNaN(left) || _.isNil(left) ? 0 : left) + + const billsLeft = _.flow( + _.map(([denomination, provisioned]) => [BN(denomination), provisioned]), + _.fromPairs, + )(solution) + + return _.map( + ({ count, name, denomination }) => { + const provisioned = billsToAssign(count, billsLeft[denomination]) + billsLeft[denomination] -= provisioned + return { name, denomination, provisioned } }, - [], - _.range(0, _.size(units)) + units ) }