Hi fellow campers. I have an issue whereby all the other tests pass but only one, which is very similar to another one that did pass. I was wondering if anyone could point out some hint or something as to where I messed up, because to me it seems logical and should work (and it does for most of the tests!). It is only failing the third test.
Here is my code (it is quite long, so sorry if this is an inconvenience):
let array = JSON.parse(JSON.stringify(cid));
let change = cash-price;
let pennyItem = array.find(item => item[0] === "PENNY");
let nickelItem = array.find(item => item[0] === "NICKEL");
let dimeItem = array.find(item => item[0] === "DIME");
let quarterItem = array.find(item => item[0] === "QUARTER");
let oneItem = array.find(item=> item[0] === "ONE");
let fiveItem = array.find(item=> item[0] === "FIVE");
let tenItem = array.find(item=> item[0] === "TEN");
let twentyItem = array.find(item=> item[0] === "TWENTY");
let oneHundredItem = array.find(item=> item[0] === "ONE HUNDRED");
let registerValue = pennyItem[1] + nickelItem[1] + dimeItem[1] + quarterItem[1] + oneItem[1] + fiveItem[1] + tenItem[1] + twentyItem[1] + oneHundredItem[1];
if (change==registerValue) {
return {status: "CLOSED", change: cid}
};
while (change>0 && change<registerValue) {
if (change>=100 && oneHundredItem[1]>=100) {
change -= 100;
oneHundredItem[1] -= 100;
} else if (change>=20 && twentyItem[1]>=20) {
change -= 20;
twentyItem[1] -= 20;
} else if (change>=10 && tenItem[1]>=10) {
change -= 10;
tenItem[1] -= 10;
} else if (change>=5 && fiveItem[1]>=5) {
change -= 5;
fiveItem[1] -= 5;
} else if (change>=1 && oneItem[1]>=1) {
change -= 1;
oneItem[1] -= 1;
} else if (change>=0.25 && quarterItem[1]>=0.25) {
change -= 0.25;
quarterItem[1] -= 0.25;
} else if (change>=0.1 && dimeItem[1]>=0.1) {
change -= 0.1;
dimeItem[1] -= 0.1;
} else if (change>=0.05 && nickelItem[1]>=0.05) {
change -= 0.05;
nickelItem[1] -= 0.05;
} else if (change>=0.01 && pennyItem[1]>=0.01) {
change -= 0.01;
pennyItem[1] -= 0.01;
} else {
return {status: "INSUFFICIENT_FUNDS", change: []}
}
};
let response = [];
if (oneHundredItem[1]!==cid.find(item=>item[0]==="ONE HUNDRED")[1]) {
response.push(["ONE HUNDRED", cid.find(item=>item[0]==="ONE HUNDRED")[1]-oneHundredItem[1]])
};
if (twentyItem[1]!==cid.find(item=>item[0]=="TWENTY")[1]) {
response.push(["TWENTY", cid.find(item=>item[0]==="TWENTY")[1]-twentyItem[1]])
};
if (tenItem[1]!==cid.find(item=>item[0]==="TEN")[1]) {
response.push(["TEN", cid.find(item=>item[0]==="TEN")[1]-tenItem[1]])
};
if (oneItem[1]!==cid.find(item=>item[0]==="ONE")[1]) {
response.push(["ONE", cid.find(item=>item[0]==="ONE")[1]-oneItem])
};
if (quarterItem[1]!==cid.find(item=>item[0]==="QUARTER")[1]) {
response.push(["QUARTER", cid.find(item=>item[0]==="QUARTER")[1]-quarterItem[1]])
};
if (dimeItem[1]!==cid.find(item=>item[0]==="DIME")[1]) {
response.push(["DIME", cid.find(item=>item[0]==="DIME")[1]-dimeItem[1]])
};
if (nickelItem[1]!==cid.find(item=>item[0]==="NICKEL")[1]) {
response.push(["NICKEL", cid.find(item=>item[0]==="NICKEL")[1]-nickelItem[1]])
};
if (pennyItem[1]!==cid.find(item=>item[0]==="PENNY")[1]) {
response.push(["PENNY", cid.find(item=>item[0]==="PENNY")[1]-pennyItem[1]])
};
if (change!==0) {
return {status: "INSUFFICIENT_FUNDS", change: []}
};
return {status: "OPEN", change: response}
}