Tell us what’s happening:
Hi there,
Could someone tell me why it should return “INSUFFICIENT_FUNDS” while there are $1.01 in the cash register
checkCashRegister(19.5, 20, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 1], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]])
should return {status: "INSUFFICIENT_FUNDS", change: []}
.
Your code so far
const REGISTER_STATUS = {closed:"CLOSED", insufficientFunds: "INSUFFICIENT_FUNDS", open:"OPEN"}
const currencyDitionary = {
'PENNY' : 0.01,
'NICKEL': 0.05,
'DIME':0.10,
'QUARTER':0.25,
'ONE': 1.00,
'FIVE': 5.00,
'TEN': 10.00,
'TWENTY': 20.00,
'ONE HUNDRED':100.00
};
function checkCashRegister(price, cash, cid){
let cashRegister = {status:"",change:[...cid]};
const changeNeeded = cash - price;
const changeAvailable = getTotalCashRegisterChange(cid);
console.log(changeNeeded);
console.log(changeAvailable);
cashRegister.status = getTotalCashRegisterStatus(changeNeeded,changeAvailable);
console.log(cashRegister.status);
if(cashRegister.status === REGISTER_STATUS.insufficientFunds){
cashRegister.change = [];
return cashRegister;
}
cashRegister.change = getCustomerChange(changeNeeded,cid);
console.log(cashRegister.change,getTotalCashRegisterChange(cashRegister.change));
if(changeNeeded === REGISTER_STATUS.open){
cashRegister.change = cashRegister.change;
}
if(cashRegister.status === REGISTER_STATUS.closed){
cashRegister.change = [...cid];
}
return cashRegister;
}
function getCustomerChange(changeNeeded,changeInDrawer){
let change = [];
for(let i=changeInDrawer.length-1; i>=0; i--){
const coinName = changeInDrawer[i][0];
const coinTotal = changeInDrawer[i][1];
const coinValue = currencyDitionary[coinName];
let coinAmount = (coinTotal/coinValue).toFixed(2);
let coinToReturn = 0;
while(changeNeeded >= coinValue && coinAmount>0){
changeNeeded -= coinValue;
coinAmount--;
coinToReturn++;
}
if(coinToReturn > 0){
change.push([coinName, coinToReturn * coinValue]);
}
}
return change;
}
function getTotalCashRegisterChange(changeInDrawer){
let total = 0;
for(let change of changeInDrawer){
let changeValue = change[1];
total += changeValue;
}
return total.toFixed(2);
}
function getTotalCashRegisterStatus(changeNeeded,changeAvailable){
if(changeNeeded > changeAvailable){
return REGISTER_STATUS.insufficientFunds;
}
if(changeNeeded < changeAvailable){
return REGISTER_STATUS.open;
}
return REGISTER_STATUS.closed;
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36
.
Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/cash-register