-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCashRegister.js
60 lines (54 loc) · 1.23 KB
/
CashRegister.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
const currencyUnit = {
PENNY: 1,
NICKEL: 5,
DIME: 10,
QUARTER: 25,
ONE: 100,
FIVE: 500,
TEN: 1000,
TWENTY: 2000,
"ONE HUNDRED": 10000,
};
function checkCashRegister(price, cash, cid) {
let changeSum = cash * 100 - price * 100;
let changeSumCheck = changeSum;
let change = [];
let status = "";
let cidSum = 0;
let filteredCid = cid.filter((elem) => elem[1] !== 0).reverse();
filteredCid.forEach((elem) => {
let curr = elem[0];
let currSum = elem[1] * 100;
cidSum += currSum;
let amount = 0;
while (changeSum >= currencyUnit[curr] && currSum > 0) {
amount += currencyUnit[curr];
changeSum -= currencyUnit[curr];
currSum -= currencyUnit[curr];
}
if (amount !== 0) {
change.push([curr, amount / 100]);
}
});
if (changeSum > 0) {
status = "INSUFFICIENT_FUNDS";
change = [];
} else if (changeSum == 0 && changeSumCheck == cidSum) {
status = "CLOSED";
change = cid;
} else {
status = "OPEN";
}
return { status: status, change: change };
}
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],
]);