Hello everyone,
Can’t seem to pass the last cash register challenge even though my return value is the same as the tests but tests are failing, any help?
var currency = [
{ name: "ONE HUNDRED", value: 100.0 },
{ name: "TWENTY", value: 20.00 },
{ name: "TEN", value: 10.00 },
{ name: "FIVE", value: 5.00 },
{ name: "ONE", value: 1.00 },
{ name: "QUARTER", value: 0.25 },
{ name: "DIME", value: 0.10 },
{ name: "NICKEL", value: 0.05 },
{ name: "PENNY", value: 0.01 }
];
function outputMessage(status, change=[]){
let message = {
status: null,
change: []
};
message.status = status;
message.change = change;
return message;
}
function getChange(giveChange, drawer){
let totalChange = currency.reduce((acc,curr)=>{
let value = 0;
while(drawer[curr.name]>0 && giveChange>=curr.value){
giveChange-=curr.value;
drawer[curr.name]-= curr.value;
value +=curr.value;
giveChange = formatValue(giveChange);
}
if(value>0){
acc.push([curr.name, value]);
}
return acc;
},[])
if(totalChange< 1 || giveChange>0){
outputMessage("INSUFFICIENT_FUNDS");
}
outputMessage("OPEN", totalChange);
}
function formatValue(value){
return parseFloat(value.toFixed(2));
}
function calculateChange(price, cash){
let value = parseFloat(cash)-parseFloat(price)
return formatValue(value);
}
function totalCid(cid){
let total = 0;
total = cid.reduce(function(acc, curr) {
acc.total += curr[1]
acc[curr[0]] = curr[1];
return acc;
},
{ total: 0 })
return total;
}
function checkCashRegister(price, cash, cid) {
let change = calculateChange(price, cash);
var drawer = totalCid(cid);
drawer.total = formatValue(drawer.total)
if (drawer.total === change) {
return outputMessage("CLOSED",cid);
}
if (drawer.total < change) {
return outputMessage("INSUFFICIENT_FUNDS");
}
getChange(change,drawer);
}
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]]);