Hello all,
I am currently trying to pass this last challenge for the JavaScript certification.
Currently it passes all of the tests except the last one. When I run the code in a separate browser window, I get the expected output for the last test however it doesn’t pass for some reason.
Can anyone help?
My code so far is below.
let changeInDrawer;
let unreversedcashArr = [];
let cashArr = [];
let finalChangeArr;
let output = { status: null, change: []};
let change;
function checkCashRegister(price, cash, cid){
const denom = [
["PENNY", 0.01],
["NICKEL", 0.05],
["DIME", 0.10],
["QUARTER", 0.25],
["ONE", 1],
["FIVE", 5],
["TEN", 10],
["TWENTY", 20],
["ONE HUNDRED", 100]
];
const reverseDenom = denom.reverse();
output = { status: null, change: [] };
change = cash - price;
change = (Math.round( change * 100 ) / 100).toFixed(2);
change = parseFloat(change);
changeInDrawer = (cid[0][1] + cid[1][1] + cid[2][1] + cid[3][1] + cid[4][1] + cid[5][1] + cid[6][1] + cid[7][1] + cid[8][1]).toFixed(2);
changeInDrawer = parseFloat(changeInDrawer);
if (changeInDrawer - change === 0){
output.status = "CLOSED";
output.change = [cid];
return output;
}
unreversedcashArr = [cid[0][1],cid[1][1],cid[2][1],cid[3][1],cid[4][1],cid[5][1],cid[6][1],cid[7][1],cid[8][1]];
cashArr = unreversedcashArr.reverse();
if (changeInDrawer < change){
output.status = "INSUFFICIENT_FUNDS";
return output;
} else {
for(let i = 0 ; i<cashArr.length; i++){
if (change >= reverseDenom[i][1] && change >= cashArr[i]){
change = (Math.round( change * 100 ) / 100).toFixed(2);
change = change - cashArr[i];
change = (Math.round( change * 100 ) / 100).toFixed(2);
change = parseFloat(change);
cashArr[i] = 0;
} else if (change >= reverseDenom[i][1] && change < cashArr[i]){
change = (Math.round( change * 100 ) / 100).toFixed(2);
change = parseFloat(change);
let changeCopy = change;
change = change % reverseDenom[i][1];
change = (Math.round( change * 100 ) / 100).toFixed(2);
change = parseFloat(change);
cashArr[i] = cashArr[i] - changeCopy + change;
cashArr[i] = (Math.round( cashArr[i] * 100 ) / 100).toFixed(2);
change = (Math.round( change * 100 ) / 100).toFixed(2);
}
}
}
if (change > 0 && change != cash - price){
output.status = "INSUFFICIENT_FUNDS";
output.change = [];
return output;
}
if (change < 0.01){
change = Math.floor(change);
}
changeInDrawer = changeInDrawer - change;
finalChangeArr = reverseDenom;
for (let j = 0; j<finalChangeArr.length; j++){
finalChangeArr[j][1] = cid[cid.length-1-j][1] - cashArr[j];
finalChangeArr[j][1] = (Math.round( finalChangeArr[j][1] * 100 ) / 100).toFixed(2);
finalChangeArr[j][1] = parseFloat(finalChangeArr[j][1]);
}
for (let k = finalChangeArr.length-1; k>=0; k--){
if (finalChangeArr[k][1] == 0){
finalChangeArr.splice(k, 1);
}
output.change = finalChangeArr;
}
if (changeInDrawer > 0){
output.status = "OPEN";
return output;
}
if (change > 0.01){
output.status = "INSUFFICIENT_FUNDS";
output.change = [];
}
return output;
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
.
Challenge: Cash Register
Link to the challenge: