Help with Cash Register Project

Help with Cash Register Project
0

#1

currently I am stuck while testing for when I have a $1 and a penny in my cash register and the expected change is a quarter. I can’t seem to get the correct test right. Other test seems to be working quite alright unlike the one I mentioned just now. Here is my code:

function checkCashRegister(price, cash, cid) {

const currencyUnit = [
    { 'name': 'ONE HUNDRED', 'value': 100 },
    { 'name': 'TWENTY', 'value': 20 },
    { 'name': 'TEN', 'value': 10 },
    { 'name': 'FIVE', 'value': 5 },
    { 'name': 'ONE', 'value': 1 },
    { 'name': 'QUARTER', 'value': 0.25 },
    { 'name': 'DIME', 'value': 0.1 },
    { 'name': 'NICKEL', 'value': 0.05 },
    { 'name': 'PENNY', 'value': 0.01 }
];

//console.log(cid);
let copyDrawer = [];


// const denom = [100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01];

for (let arr of cid) {
    copyDrawer.push(arr);
}


// console.log(copyDrawer);

let expectedChange = cash - price;

let totalInRegister = function() {
    return copyDrawer.map((arr) => {
        return arr[1];
    }).reduce((acc, curr) => {
        return acc + curr;
    }, 0).toFixed(2);
};

// Note 'change' is not the same as 'change()';


let sortedDrawer = copyDrawer.reverse(); //cid.reverse();

// console.log(sortedDrawer);

let misc;
let drawer = [];
let billAndCoins = [];
let initialChange = [];
let finale = {};


// get an array of the number of currency in the cash drawer by dividing each element in sortedDrawer
// by the currencyUnit object values and store this in variable frequency. 

let frequency = sortedDrawer.map((inx, i) => { return Math.round(inx[1] / currencyUnit[i].value); });

//set up a while loop inside a for loop deducting expected change from currencyUnit value


function test() {
    for (let idx = 0; idx < currencyUnit.length; idx++) {

        let iterator = frequency[idx];
        let cashi = 0;

        while (expectedChange >= currencyUnit[idx].value && iterator > 0) {
            misc = Number((expectedChange - currencyUnit[idx].value).toFixed(2));
      
            if (misc !== 0.00 && currencyUnit[idx].name === 'PENNY') {
                console.log({
                    status: "INSUFFICIENT_FUNDS",
                    change: []
                });

            }

            expectedChange = misc;
            iterator--;
            cashi += currencyUnit[idx].value;

        }

        
        drawer.push(Math.round(cashi * 100) / 100);

    }
}

test();




function too() {

    // map over currencyUnit and variable drawer to access name of currency and the total 
    // amount of bills used during the change/bill sorting and push into billAndCoins.
    // splice these values in pairs using splice() method and save in variable splitToValue
    // push the result of the splice() and save in variable initialChange. 

    currencyUnit.map((val, idx) => {
        billAndCoins.push(val.name, drawer[idx]);
        let splitToValue = billAndCoins.splice(0, 2);
        initialChange.push(splitToValue);
    });

    //Filter out bills that was used during the change sorting
    // these are where you have values greater than 0 in the array

    let usedBillsAndCoins = initialChange.filter((val) => {
        return val[1] > 0;
    });


    finale.status = 'OPEN';
    finale.change = usedBillsAndCoins;
    console.log(finale);
    //  return finale;
}

too();

}

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: []}


I need Help with my Cash Register Project
#2

Hi all. currently I am stuck while testing for when I have a $1 and a penny in my cash register and the expected change is a quarter. I can’t seem to get the correct test right. Other test seems to be working quite alright unlike the one I mentioned just now. Here is my code:

function checkCashRegister(price, cash, cid) {

const currencyUnit = [
    { 'name': 'ONE HUNDRED', 'value': 100 },
    { 'name': 'TWENTY', 'value': 20 },
    { 'name': 'TEN', 'value': 10 },
    { 'name': 'FIVE', 'value': 5 },
    { 'name': 'ONE', 'value': 1 },
    { 'name': 'QUARTER', 'value': 0.25 },
    { 'name': 'DIME', 'value': 0.1 },
    { 'name': 'NICKEL', 'value': 0.05 },
    { 'name': 'PENNY', 'value': 0.01 }
];

//console.log(cid);
let copyDrawer = [];


// const denom = [100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01];

for (let arr of cid) {
    copyDrawer.push(arr);
}


// console.log(copyDrawer);

let expectedChange = cash - price;

let totalInRegister = function() {
    return copyDrawer.map((arr) => {
        return arr[1];
    }).reduce((acc, curr) => {
        return acc + curr;
    }, 0).toFixed(2);
};

// Note 'change' is not the same as 'change()';


let sortedDrawer = copyDrawer.reverse(); //cid.reverse();

// console.log(sortedDrawer);

let misc;
let drawer = [];
let billAndCoins = [];
let initialChange = [];
let finale = {};


// get an array of the number of currency in the cash drawer by dividing each element in sortedDrawer
// by the currencyUnit object values and store this in variable frequency. 

let frequency = sortedDrawer.map((inx, i) => { return Math.round(inx[1] / currencyUnit[i].value); });

//set up a while loop inside a for loop deducting expected change from currencyUnit value


function test() {
    for (let idx = 0; idx < currencyUnit.length; idx++) {

        let iterator = frequency[idx];
        let cashi = 0;

        while (expectedChange >= currencyUnit[idx].value && iterator > 0) {
            misc = Number((expectedChange - currencyUnit[idx].value).toFixed(2));
      
            if (misc !== 0.00 && currencyUnit[idx].name === 'PENNY') {
                console.log({
                    status: "INSUFFICIENT_FUNDS",
                    change: []
                });

            }

            expectedChange = misc;
            iterator--;
            cashi += currencyUnit[idx].value;

        }

        
        drawer.push(Math.round(cashi * 100) / 100);

    }
}

test();




function too() {

    // map over currencyUnit and variable drawer to access name of currency and the total 
    // amount of bills used during the change/bill sorting and push into billAndCoins.
    // splice these values in pairs using splice() method and save in variable splitToValue
    // push the result of the splice() and save in variable initialChange. 

    currencyUnit.map((val, idx) => {
        billAndCoins.push(val.name, drawer[idx]);
        let splitToValue = billAndCoins.splice(0, 2);
        initialChange.push(splitToValue);
    });

    //Filter out bills that was used during the change sorting
    // these are where you have values greater than 0 in the array

    let usedBillsAndCoins = initialChange.filter((val) => {
        return val[1] > 0;
    });


    finale.status = 'OPEN';
    finale.change = usedBillsAndCoins;
    console.log(finale);
    //  return finale;
}

too();

}

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: []}


#3

Is this related to this Help with Cash Register Project you posted earlier?
Messages can be edited.

Your code returns { status: 'INSUFFICIENT_FUNDS', change: [] }
Is that not correct?


#4

yes it is correct but it failed on the FCC IDE. @JohnnyBizzel