Tell us what’s happening:
For the second time, I’m going to the forums to ask for help on an unexplained error
Basically, my code works down through the denominations, checking whether I can give some change from that draw.
However, for the case where I need to give 96 and a bit dollars in change, my program decides to give all of it in pennies. Why? I have no clue.
Any help will be greatly appreciated.
Your code so far
function checkCashRegister(price, cash, cid) {
var change;
// Here is your change, ma'am.
var currency = {
PENNY: 0.01,
NICKEL: 0.05,
DIME: 0.1,
QUARTER: 0.25,
ONE: 1,
FIVE: 5,
TEN: 10,
TWENTY: 20,
"ONE HUNDRED": 100
};
function getChange(amount, cid) {
var oldCid = Object.assign({}, cid);
var out = [];
console.log("Original amount is " + amount);
for (var i = 0; i < cid.length; i++) {
cid[i][1] /= currency[cid[i][0]];
cid[i][1] = Math.round(cid[i][1]);
}
var oldAmount;
//alert(cid.length)
for (var i = cid.length - 1; i >= 0; i--) {
//alert(j)
//i = (cid.length-1)-j
//alert("i is " + i)
//console.log("cid" + cid)
if (
Math.floor(amount / currency[cid[i][0]]) > 0 &&
Math.floor(amount / currency[cid[i][0]]) * currency[cid[i][0]] < oldCid[i][1]
) {
//console.log("Before")
oldAmount = amount;
var subtractedAmount =
Math.floor(amount / currency[cid[i][0]]) * currency[cid[i][0]];
console.log("Amount before " + amount);
console.log("Currency to be removed " + currency[cid[i][0]]);
console.log("Subtracting " + subtractedAmount);
amount -= subtractedAmount;
console.log("Amount after " + amount);
//console.log("After")
out.push([cid[i][0], subtractedAmount]);
console.log("Used " + cid[i][0] + " so now amount is " + amount);
}
else{
console.log("Discarded " + cid[i][0])
}
//console.log("Passed if")
//console.log("cid after if " + cid)
}
//console.log("Amount is " + amount)
if (amount <= 0) {
console.log("Returning " + out);
return out;
}
return false;
}
var total = 0;
for (var i = 0; i < cid.length; i++) {
total += cid[i][1];
}
if (cash - price > total) {
return { status: "INSUFFICIENT_FUNDS", change: [] };
}
if (cash - price === total) {
return { status: "CLOSED", change: cid };
} else {
change = getChange(cash - price, cid);
//alert(money);
if (change) {
return { status: "OPEN", change: change };
}
return { status: "INSUFFICIENT_FUNDS", change: [] };
}
return change;
}
// Example cash-in-drawer array:
// [["PENNY", 1.01],
// ["NICKEL", 2.05],
// ["DIME", 3.1],
// ["QUARTER", 4.25],
// ["ONE", 90],
// ["FIVE", 55],
// ["TEN", 20],
// ["TWENTY", 60],
// ["ONE HUNDRED", 100]]
//alert(2.05/0.05)
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
.
Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/cash-register