This solution I came up with is not passing one test…been on it for a while.
I would like to know what the issue is with the code and how it can be fixed. Thank you.
Please forgive the disastrous design and variable naming.
function checkCashRegister(price, cash, cid) {
var change;
let cidArr = [];
let monObj = {};
change = cash - price;
let a = cid.filter(e => e[1] > change).every(e =>{ e[1] < change});
for (const money of cid) {
if (change == money[1]) {
monObj.status = "CLOSED";
monObj.change = cid;
//console.log(monObj);
break;
} else if (a == true) {
monObj.status = "INSUFFICIENT_FUNDS";
monObj.change = [];
break;
} else {
//console.log(change, money[1]);
monObj.status = "OPEN";
if (change >= 20 && change < 100) {
let tc = 0;
while (change >= 20 && change < 100) {
change -= 20;
tc += 20;
if (tc == 60) {
break
}
} cidArr.push(["TWENTY", tc]);
}
if (change >= 10 && change < 20 || change > 10) {
let tc = 0;
while (change >= 10 && change < 20 || change > 10) {
change -= 10;
tc += 10;
if (tc == 20) {
break
}
} cidArr.push(["TEN", tc]);
}
if (change >= 5 && change < 10 || change > 5) {
let tc = 0;
while (change >= 5 && change < 10 || change > 5) {
change -= 5;
tc += 5;
if (tc == 55) {
break
}
} cidArr.push(["FIVE", tc]);
}
if (change >= 1 && change < 5 || change > 1) {
let tc = 0;
while (change >= 1 && change < 5 || change > 1) {
change -= 1;
tc += 1;
if (tc == 90) {
break
}
} cidArr.push(["ONE", tc]);
}
if (change >= 0.25 && change < 1 || change > 0.25) {
let tc = 0
while (change >= 0.25 && change < 1 || change > 0.25) {
change -= 0.25;
tc += 0.25;
if (tc == 4.25) {
break
}
} cidArr.push(["QUARTER", tc]);
}
if (change >= 0.1 && change < 0.25 || change > 0.1) {
let tc = 0;
while (change >= 0.1 && change < 0.25 || change > 0.1) {
change -= 0.1;
tc += 0.1;
if (tc == 3.1) {
break
}
} cidArr.push(["DIME", tc]);
}
if (change >= 0.05 && change < 0.1 || change > 0.05) {
let tc = 0;
while (change >= 0.05 && change < 0.1 || change > 0.05) {
change -= 0.05;
tc += 0.05;
if (tc == 2.05) {
break
}
} cidArr.push(["NICKEL", tc]);
}
if (change >= 0.01 && change < 0.05 || change > 0.01) {
let tc = 0;
while (change >= 0.01 && change < 0.05 || change > 0.01) {
change = Math.round(change * 1000) / 1000;
change -= 0.01;
tc += 0.01;
if (tc == 1.01) {
break
}
} cidArr.push(["PENNY", tc]);
}
}
monObj.change = cidArr;
}
return monObj;
}
checkCashRegister(19.5, 20, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 1], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]);