Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //First get change needed
- //Then get total cash available in drawer
- //The status depends on change needed and cash available in drawer
- //If status is "insufficient funds", return and end program
- //Get greedy change
- export function checkCashRegister(price: number, cash: number, cid: any) {
- let changeNeeded = cash - price;
- const totalCashAvailableInDrawer = (array: []) => {
- const total = array.reduce((accum, curr) => accum + curr[1], 0);
- return total;
- };
- let totalCash = totalCashAvailableInDrawer(cid);
- let cashRegister: { [key: string]: any } = {
- status: "",
- change: []
- };
- const getStatus = (changeNeeded: number, totalCash: number) => {
- return Number(changeNeeded) > Number(totalCash)
- ? (cashRegister.status = "INSUFFICIENT_FUNDS")
- : Number(changeNeeded) < Number(totalCash)
- ? (cashRegister.status = "OPEN")
- : Number(changeNeeded) === Number(totalCash)
- ? (cashRegister.status = "CLOSED")
- : "No results";
- };
- cashRegister.status = getStatus(changeNeeded, totalCash);
- if (cashRegister.status === "INSUFFICIENT_FUNDS") {
- cashRegister.change = [];
- return cashRegister;
- }
- if (cashRegister.status === "CLOSED") {
- cashRegister.change = cid;
- return cashRegister;
- }
- const greedyChange = (changeNeeded: any, totalCash: any) => {
- const change = [];
- const currencyDictionary: { [key: string]: number } = {
- PENNY: 0.01,
- NICKEL: 0.05,
- DIME: 0.1,
- QUARTER: 0.25,
- ONE: 1.0,
- FIVE: 5.0,
- TEN: 10.0,
- TWENTY: 20.0,
- "ONE HUNDRED": 100.0
- };
- for (let i = totalCash.length - 1; i >= 0; i--) {
- const currencyName: string = totalCash[i][0];
- currencyName;
- const currencyTotal = totalCash[i][1];
- currencyTotal;
- const currencyValue = currencyDictionary[currencyName];
- currencyValue;
- let currencyAmount = currencyTotal / currencyValue;
- let currencyToReturn = 0;
- while (changeNeeded >= currencyValue && currencyAmount > 0) {
- changeNeeded -= currencyValue;
- changeNeeded = changeNeeded.toFixed(2);
- changeNeeded;
- currencyAmount--;
- currencyToReturn++;
- }
- changeNeeded;
- currencyAmount;
- currencyToReturn;
- if (currencyToReturn > 0) {
- change.push([currencyName, currencyToReturn * currencyValue]);
- }
- }
- if (changeNeeded > 0) {
- cashRegister = {
- status: "INSUFFICIENT_FUNDS",
- change: []
- };
- return cashRegister;
- }
- cashRegister = {
- status: cashRegister.status,
- change
- };
- return cashRegister;
- };
- return greedyChange(changeNeeded, cid);
- }
- //{status: "OPEN", change: [["QUARTER", 0.5]]}
- console.log(
- 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]
- ])
- );
- //{status: "OPEN", change: [["TWENTY", 60], ["TEN", 20], ["FIVE", 15], ["ONE", 1], ["QUARTER", 0.5], ["DIME", 0.2], ["PENNY", 0.04]]}
- console.log(
- checkCashRegister(3.26, 100, [
- ["PENNY", 1.01],
- ["NICKEL", 2.05],
- ["DIME", 3.1],
- ["QUARTER", 4.25],
- ["ONE", 90],
- ["FIVE", 55],
- ["TEN", 20],
- ["TWENTY", 60],
- ["ONE HUNDRED", 100]
- ])
- );
- //{status: "INSUFFICIENT_FUNDS", change: []}.
- console.log(
- checkCashRegister(19.5, 20, [
- ["PENNY", 0.01],
- ["NICKEL", 0],
- ["DIME", 0],
- ["QUARTER", 0],
- ["ONE", 1],
- ["FIVE", 0],
- ["TEN", 0],
- ["TWENTY", 0],
- ["ONE HUNDRED", 0]
- ])
- );
- //{status: "CLOSED", change: [["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]}
- // console.log(
- // checkCashRegister(19.5, 20, [
- // ["PENNY", 0.5],
- // ["NICKEL", 0],
- // ["DIME", 0],
- // ["QUARTER", 0],
- // ["ONE", 0],
- // ["FIVE", 0],
- // ["TEN", 0],
- // ["TWENTY", 0],
- // ["ONE HUNDRED", 0]
- // ])
- // );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement