JavaScript Algorithms and Data Structures Projects - Cash Register

Tell us what’s happening:
Asking for someone to point out the problem.
Not getting the expected output of { status: OPEN, change: [[“QUARTER”, 0.5]] }

Your code so far

function checkCashRegister(price, cash, cid) {
  const change = cash - price;
  //changeDue is the amount of money to be given to the customer
  let changeDue = [["PENNY", 0], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]];

  //cashReg is cid and the representation of the cash register
  let cashReg =  [...cid];

  //moneyUnit is the denomination of each bill contained in the cash register. It is arranged in accordance of order in the cash register
  let moneyUnit = [0.01, 0.05, 0.1, 0.25, 1, 5, 10, 20, 100];
  
  //Declare two variables denoting status of cash register and changeDue respectively
  let _status, _change;
  
  //Create an IIFE that will check the amount of the cash register to decide whether to call another function or not
  ( function() {
    //Check the amount of the cash register
    let cashRegContent = cashReg.reduce( ((total,entry) => total + entry[1]),0);
    cashRegContent = cashRegContent.toFixed(2);
    cashRegContent = parseFloat(cashRegContent);
    
    //When the total amount of the cash register is equal to the chnange
    if ( cashRegContent === change ) {_status = "CLOSED"; _change = cid}
    //When the total amount of the cash register is less than the change
    else if ( cashRegContent < change ) {_status = "INSUFFICIENT FUNDS"; _change = []}
    //Call a function when the total amount of the cash register is more than the change
    else if ( cashRegContent > change) { processChange(); } 
    }) ();
  

// Function processChange will check if the given denomination of bill can provide for the change
    function processChange() {
    //For each denomination, bal is the amount of the preceeding denominations in the ChangeDue
    //Iteration starts from the end of the array
    for (let j = cashReg.length - 1 ; j<0 ; j--) {
      let bal = changeDue.slice(j+1).reduce( ((total,entry) => total + entry[1]),0);
      bal = bal.toFixed(2);
      bal = parseFloat(bal);
      //partial is the amount to take from cashReg before putting it to the ChangeDue
      let partial = 0;
      while ( (bal + partial + moneyUnit[j]) <= change && cashReg[j][1] > 0) {
        partial += moneyUnit[j];
        cashReg[j][1] -= moneyUnit[j];
      }
      changeDue[j][1] = partial; 
    }
    }

  let balance = changeDue.reduce( ((total,entry) => total + entry[1]),0);
  balance = balance.toFixed(2);
  balance = parseFloat(balance);
  //console.log(balance);
  //console.log(changeDue);

  //Depending on the value of balance, call a function and set the corresponding values to variables _status and _change
  if (balance === change) { trim(); _status = "OPEN" ; _change = changeDue}
  else if (balance < change) {_status = "INSUFFICIENT FUNDS"; _change = [] }
  
  function trim() { changeDue = changeDue.filter(entry => {return entry[1] !== 0} )}
  
  let regStat = {status: _status, change: _change};
  return regStat;
  
}

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


**Your browser information:**

User Agent is: <code>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0</code>

**Challenge:**  JavaScript Algorithms and Data Structures Projects - Cash Register

**Link to the challenge:**
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/javascript-algorithms-and-data-structures-projects/cash-register

With your code right now im getting { status: 'INSUFFICIENT FUNDS', change: [] }. I would recommend tossing some console.logs around where you are changing your _status and _change to those values and see if you can back track all the way to the problem. I got it to return { status: OPEN, change: [[“QUARTER”, 0.5]] } by changing one character in your code, but it was still failing all the other tests.

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