 # Cash Register-Challenge solved but still have some questions

Tell us what’s happening:
Hi, I have cracked the solution and it shares the same logic as the answer provided.

But under this logic, this input:

checkCashRegister(19.7, 20, [[“PENNY”, 0], [“NICKEL”, 0], [“DIME”, 0.30], [“QUARTER”, 0.25], [“ONE”, 0], [“FIVE”, 0], [“TEN”, 0], [“TWENTY”, 0], [“ONE HUNDRED”, 0]])

will return:

{ status: ‘INSUFFICIENT_FUNDS’, change: }

But just by looking at it, we know that we could just return [“DIME”, 0.30].
Anyone has solved this issue?

Sorry my code is a bit messy as I wrote in VSC but not here.

``````
function checkCashRegister(price, cash, cid) {
let change = cash - price; //setup change due

//setup basic currency list
let currency = {'PENNY':0.01, 'NICKEL':0.05,'DIME':0.1,'QUARTER':0.25,'ONE':1,'FIVE':5,'TEN':10,'TWENTY':20,'ONE HUNDRED':100};

//solution of b: change due = total cash
if (cid.reduce((sum,element)=>sum+element,0) === change)
{return {status: "CLOSED", change: cid};}
//

//solution of ai: total cash < change due
else if (cid.reduce((sum,element)=>sum+element,0) < change)
{return {status: "INSUFFICIENT_FUNDS", change: []};}
//

//solution of aii & c
else {
let bill = cid.filter(element=>element > 0 && currency[element] <= change); //array containing only existing bill with face value less than change due

let remval = change; //to be used in the loop
let changeobj = {}; //to push the required answer into it

//method to get the desired answer
for (let j = bill.length -1; j >= 0; j--) //from highest to lowest
{
let i; //use to represent quantity needed of each bill/coin
let facevalue = currency[bill[j]]; //the facevalue of each bill.coin
let iquantity = bill[j] / facevalue; //how many bill/coin we have respectively

for (i = 1; i * facevalue <= remval && i <= iquantity; i++) // to get which bill needed and its total value
{
changeobj[bill[j]] = i * facevalue;
}

remval -= (i - 1) * facevalue; // to get a new remval for next loop
remval = Math.round(remval*100) / 100; //to resolve java calculation decimal error
}

//to distinguish between solution c & aii
if (remval > 0) {return {status: "INSUFFICIENT_FUNDS", change: []};} //solution of aii

else { //solution of c
let billnamearr = Object.keys(changeobj); // to get the name & length for next loop
let changearr = []; // to put the answer in

for (let k = 0; k < billnamearr.length; k++) //make the changearr the format required
{
let temparr = [billnamearr[k],changeobj[billnamearr[k]]];
changearr.push(temparr);
}

return {status: "OPEN", change: changearr}; //return the answer
}
}
//
}

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]]);
``````

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36`.