Exact Change - Help answers matched but won't pass

Exact Change - Help answers matched but won't pass
0

#1

Hey All!

I’ve been stuck on this problem for some time.
Had a weird bug with getting weird decimal numbers. This seems to have been resolved using an extra function to round answers to two decimal places explicitly.

Now I have a working solution that satisfies and completes all answers except one. (I get the correct answer but it won’t give me a check mark…)

Givens: 19.50, 20.00, [[“PENNY”, 0.01], [“NICKEL”, 0], [“DIME”, 0], [“QUARTER”, 0], [“ONE”, 0], [“FIVE”, 0], [“TEN”, 0]

Expected: “Insufficient Funds” - I get this exact answer but it would not let me pass all other tests have been passed.

Full code below. (Sorry rather lengthy)
function checkCashRegister(price, cash, cid) {

function roundMe(number) {
number *= 100;
number = Math.round(number);
number /= 100;
return number;
}
var change = cash-price;
var answer;
var changes = [1/100, 5/100,1/10,1/4,1,5,10,20,100];
var totalChange = 0;
var array = [];
var currentArray =[0,0];
// check for the two bad scenarios.
for (var i=0; i<cid.length; i++){
totalChange += cid[i][1];
}
if (totalChange < change){
return “Insufficent Funds”;
}
else if (totalChange == change){
return “Closed”;
}
//main program
else {
//read through the cid from biggest to smallest.

for (var i= cid.length-1; i>=0; i–){
if (changes[i]<= change && cid[i][1]>0 && change >0){
currentArray[0] = cid[i][0];
// if we require more change than what is available in correct basket then we take the entire pot of correct.
if (roundMe(change) >= cid[i][1]) {
currentArray[1] = roundMe(cid[i][1]);
change = change-cid[i][1];
change = roundMe(change);
}
else {
//keep taking out of the basket UNTIL the correct change no longer becomes the correct change.
while (roundMe(change) >= roundMe(changes[i])){
currentArray[1] += roundMe(changes[i]);
change -= roundMe(changes[i]);
cid[i][1] -= roundMe(changes[i]);
}
}
}
if (currentArray[1]>0){
array.push(currentArray);
}
currentArray = [0,0];
}
// Last insufficient funds checker.
if (roundMe(change)>0){
return “Insufficient Funds”;
}
else{answer = array;}
}
// Here is your change, ma’am.
return answer;
}

Test Below.
checkCashRegister(19.50, 20.00, [[“PENNY”, 0.01], [“NICKEL”, 0], [“DIME”, 0], [“QUARTER”, 0], [“ONE”, 0], [“FIVE”, 0], [“TEN”, 0], [“TWENTY”, 0], [“ONE HUNDRED”, 0]]);


#2

This line has a typo “Insufficent”

if (totalChange < change){
return "Insufficent Funds";
}

#3

Thank you very much ppc!


#4

In the future can you please put your code in code tags. It’s really hard to help you when your text is not properly formatted.

var x = 1;
var y = 2;
var z = 3;