Tell us what’s happening:
I keep failing the last test on the cash register project (where status should read “CLOSED” and change should be [[“PENNY”, 0.5], [“NICKEL”, 0], [“DIME”, 0], [“QUARTER”, 0], [“ONE”, 0], [“FIVE”, 0], [“TEN”, 0], [“TWENTY”, 0], [“HUNDRED”, 0]]. But when I test it on CodePen the code returns exactly what it should.
Your code so far
function checkCashRegister(price, cash, cid) {
const output = {status: "OPEN", change: []};
let closed = false;
const denom = {
"PENNY": 1,
"NICKEL": 5,
"DIME": 10,
"QUARTER": 25,
"ONE": 100,
"FIVE": 500,
"TEN": 1000,
"TWENTY": 2000,
"HUNDRED": 10000
}
let changeDue = cash * 100 - price * 100;
const register = cid.reverse().map(el => [el[0], Math.round(el[1] * 100)]);
const registerTotal = register.reduce((sum, elem) => (sum + elem[1]), 0);
if(changeDue > registerTotal){
output.status = "INSUFFICIENT_FUNDS";
}
if (changeDue === registerTotal){
output.status = "CLOSED";
closed = true;
}
if(changeDue <= registerTotal){output.change = register.reduce((acc,elem) => {
let partial = Math.min(elem[1],Math.floor(changeDue / denom[elem[0]]) * denom[elem[0]]);
if(partial > 0){
changeDue -= partial;
acc.push([elem[0], partial / 100]);
if(closed){
acc.push(["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["HUNDRED", 0]);
}
}
return acc;
}, []);
if(changeDue > 0){
output.status = "INSUFFICIENT_FUNDS";
output.change = [];
}
}
return output;
}
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]]);
Your browser information:
User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36
.
Challenge: Cash Register
Link to the challenge: