1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| function checkCashRegister(price, cash, cid) { let change = [];
let unit = { "ONE HUNDRED": 100, TWENTY: 20, TEN: 10, FIVE: 5, ONE: 1, QUARTER: 0.25, DIME: 0.1, NICKEL: 0.05, PENNY: 0.01, }
let cidUnitCount = getUnitCount(cid, unit); let remain = cash - price, isSuit = true; for (let key in unit) { if (unit[key] <= remain) { const unitPrice = unit[key]; const unitTotalCount = cidUnitCount[key]; let curTotalPrice = 0, curCount = 0; while (curTotalPrice < remain && curCount < unitTotalCount) { curCount++; curTotalPrice = curCount * unitPrice; } if (curTotalPrice > remain) { curCount--; curTotalPrice = curCount * unitPrice; } if (curCount !== 0) { change.push([key,curTotalPrice ]); remain = (remain - curTotalPrice).toFixed(2); } if (curCount !== unitTotalCount) { isSuit = false; } } } let result; if (remain == 0) { if (isSuit) { result = { status: "CLOSED", change: cid }; } else { result = { status: "OPEN", change: change }; } } else { result = { status: "INSUFFICIENT_FUNDS", change: [] }; } return result; }
function getUnitCount(arr, unit) { let result = {}; arr.forEach(item => { const [key, value] = item; result[key] = Math.round(value / unit[key]); }) return result; }
checkCashRegister(19.5, 20, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]);
checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]])
checkCashRegister(19.5, 20, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]])
checkCashRegister(19.5, 20, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 1], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]])
checkCashRegister(19.5, 20, [["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]])
|