JavaScript Algorithms and Data Structures Projects - Cash Register

Tell us what’s happening:
Hi. My code gives the correct answer but the test will fail.

Your code so far
function checkCashRegister(price, cash, cid) {
//This function is because toFixed() is chanching the variable to “String”
let roundOff = (num) => {
const x = Math.pow(10, 2);
return Math.round(num * x) / x;
}
const currencyTable = [
[“PENNY”, .01], [“NICKEL”, .05], [“DIME”, .1],
[“QUARTER”, .25], [“ONE”, 1], [“FIVE”, 5],
[“TEN”, 10], [“TWENTY”, 20], [“ONE HUNDRED”, 100],
];

let changeArray = [];
let result = {status: "", change: []};
let count = currencyTable.length - 1;
let takeMoney = 0;
let change = roundOff(cash - price);
let availableCyrrency = 0;
let getFromDrawer = 0;

let totalCash = roundOff(cid.reduce(
	(money, item) =>
		money + item[1], 0
));

if (change == totalCash) {
	result.status = "CLOSED";
	result.change = cid;
	return result;
}
if (totalCash < change) {
	result.status = 'INSUFFICIENT_FUNDS';
	return result;
}

while(change > 0) {
	takeMoney = Math.floor(change / currencyTable[count][1]);
	change = roundOff(change % currencyTable[count][1]);

	if (takeMoney > 0) {
		availableCyrrency = roundOff(cid[count][1]);
		getFromDrawer = roundOff(takeMoney * currencyTable[count][1]);
		let diference = roundOff(availableCyrrency - getFromDrawer);
		if (diference < 0) {
			changeArray.push([currencyTable[count][0], availableCyrrency]);
			change = roundOff(change + Math.abs(diference));
			takeMoney = 0;
		} else {
			changeArray.push([currencyTable[count][0], getFromDrawer]);
		}

	}
	count --;
}
let checkFinalChange = roundOff(changeArray.reduce(
	(money, item) =>
		money + item[1], 0
));
if (checkFinalChange != roundOff(cash - price)) {
	result.status = 'INSUFFICIENT_FUNDS';
	result;
}
result.status = "OPEN";
result.change = changeArray;
return result;

}
/*
const myCid = [
[“PENNY”, 1.01],
[“NICKEL”, 2.05],
[“DIME”, 3.1],
[“QUARTER”, 4.25],
[“ONE”, 90],
[“FIVE”, 55],
[“TEN”, 20],
[“TWENTY”, 60],
[“ONE HUNDRED”, 100]
];
*/
const myCid = [
[“PENNY”, 0.01],
[“NICKEL”, 0],
[“DIME”, 0],
[“QUARTER”, 0],
[“ONE”, 0],
[“FIVE”, 0],
[“TEN”, 0],
[“TWENTY”, 0],
[“ONE HUNDRED”, 0]
];
console.log(checkCashRegister(19.5, 20, myCid));

function checkCashRegister(price, cash, cid) {
	//This function is because toFixed() is chanching the variable to "String"
	let roundOff = (num) => {
		const x = Math.pow(10, 2);
		return Math.round(num * x) / x;
	}	
	//Currency Table
	const currencyTable = [
		["PENNY", .01],		["NICKEL", .05],	["DIME", .1],
		["QUARTER", .25],	["ONE", 1],			["FIVE", 5],
		["TEN", 10],		["TWENTY", 20],		["ONE HUNDRED", 100],
	];	

	let changeArray = [];
	let result = {
		status: '',
		change: []
	};
	let count = currencyTable.length - 1;
	let takeMoney = 0;
	let change = roundOff(cash - price);
	let availableCyrrency = 0;
	let getFromDrawer = 0;

	let totalCash = roundOff(cid.reduce(
		(money, item) =>
			money + item[1], 0
	));

	if (change == totalCash) {
		result.status = "CLOSED";
		result.change = cid;
		return result;
	}
	if (totalCash < change) {
		result.status = "INSUFFICIENT_FUNDS";
		return result;
	}

	while(change > 0) {
		takeMoney = Math.floor(change / currencyTable[count][1]);
		change = roundOff(change % currencyTable[count][1]);

		if (takeMoney > 0) {
			availableCyrrency = roundOff(cid[count][1]);
			getFromDrawer = roundOff(takeMoney * currencyTable[count][1]);
			let diference = roundOff(availableCyrrency - getFromDrawer);
			if (diference < 0) {
				changeArray.push([currencyTable[count][0], availableCyrrency]);
				change = roundOff(change + Math.abs(diference));
				takeMoney = 0;
			} else {
				changeArray.push([currencyTable[count][0], getFromDrawer]);
			}

		}
		count --;
	}
	let checkFinalChange = roundOff(changeArray.reduce(
		(money, item) =>
			money + item[1], 0
	));
	if (checkFinalChange != roundOff(cash - price)) {
		result.status = 'INSUFFICIENT_FUNDS';
		result;
	}
	result.status = "OPEN";
	result.change = changeArray;
	return result;

}

const money = checkCashRegister(19.5, 20, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]);
console.log(money);

Your browser information:

User Agent is: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0

Challenge: JavaScript Algorithms and Data Structures Projects - Cash Register

Link to the challenge:

This is the output from the challenge page:
// running tests
checkCashRegister(19.5, 20, [[“PENNY”, 0.01], [“NICKEL”, 0], [“DIME”, 0], [“QUARTER”, 0], [“ONE”, 1], [“FIVE”, 0], [“TEN”, 0], [“TWENTY”, 0], [“ONE HUNDRED”, 0]])

should return

{status: “INSUFFICIENT_FUNDS”, change: }

. // tests completed
 // console output { status: 'INSUFFICIENT_FUNDS', change: [] }

As you can see, the output is the required one. But it fails.

Check your test case again:

Thank You. I fixed. :love_you_gesture:

This has helped more people than you know. Thank you

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.