Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.46 KB | None | 0 0
  1. //First get change needed
  2. //Then get total cash available in drawer
  3. //The status depends on change needed and cash available in drawer
  4. //If status is "insufficient funds", return and end program
  5. //Get greedy change
  6.  
  7. export function checkCashRegister(price: number, cash: number, cid: any) {
  8. let changeNeeded = cash - price;
  9. const totalCashAvailableInDrawer = (array: []) => {
  10. const total = array.reduce((accum, curr) => accum + curr[1], 0);
  11. return total;
  12. };
  13. let totalCash = totalCashAvailableInDrawer(cid);
  14. let cashRegister: { [key: string]: any } = {
  15. status: "",
  16. change: []
  17. };
  18. const getStatus = (changeNeeded: number, totalCash: number) => {
  19. return Number(changeNeeded) > Number(totalCash)
  20. ? (cashRegister.status = "INSUFFICIENT_FUNDS")
  21. : Number(changeNeeded) < Number(totalCash)
  22. ? (cashRegister.status = "OPEN")
  23. : Number(changeNeeded) === Number(totalCash)
  24. ? (cashRegister.status = "CLOSED")
  25. : "No results";
  26. };
  27. cashRegister.status = getStatus(changeNeeded, totalCash);
  28. if (cashRegister.status === "INSUFFICIENT_FUNDS") {
  29. cashRegister.change = [];
  30. return cashRegister;
  31. }
  32. if (cashRegister.status === "CLOSED") {
  33. cashRegister.change = cid;
  34. return cashRegister;
  35. }
  36. const greedyChange = (changeNeeded: any, totalCash: any) => {
  37. const change = [];
  38. const currencyDictionary: { [key: string]: number } = {
  39. PENNY: 0.01,
  40. NICKEL: 0.05,
  41. DIME: 0.1,
  42. QUARTER: 0.25,
  43. ONE: 1.0,
  44. FIVE: 5.0,
  45. TEN: 10.0,
  46. TWENTY: 20.0,
  47. "ONE HUNDRED": 100.0
  48. };
  49.  
  50. for (let i = totalCash.length - 1; i >= 0; i--) {
  51. const currencyName: string = totalCash[i][0];
  52. currencyName;
  53. const currencyTotal = totalCash[i][1];
  54. currencyTotal;
  55. const currencyValue = currencyDictionary[currencyName];
  56. currencyValue;
  57. let currencyAmount = currencyTotal / currencyValue;
  58. let currencyToReturn = 0;
  59.  
  60. while (changeNeeded >= currencyValue && currencyAmount > 0) {
  61. changeNeeded -= currencyValue;
  62. changeNeeded = changeNeeded.toFixed(2);
  63. changeNeeded;
  64. currencyAmount--;
  65. currencyToReturn++;
  66. }
  67. changeNeeded;
  68. currencyAmount;
  69. currencyToReturn;
  70. if (currencyToReturn > 0) {
  71. change.push([currencyName, currencyToReturn * currencyValue]);
  72. }
  73. }
  74. if (changeNeeded > 0) {
  75. cashRegister = {
  76. status: "INSUFFICIENT_FUNDS",
  77. change: []
  78. };
  79. return cashRegister;
  80. }
  81.  
  82. cashRegister = {
  83. status: cashRegister.status,
  84. change
  85. };
  86.  
  87. return cashRegister;
  88. };
  89. return greedyChange(changeNeeded, cid);
  90. }
  91. //{status: "OPEN", change: [["QUARTER", 0.5]]}
  92. console.log(
  93. checkCashRegister(19.5, 20, [
  94. ["PENNY", 1.01],
  95. ["NICKEL", 2.05],
  96. ["DIME", 3.1],
  97. ["QUARTER", 4.25],
  98. ["ONE", 90],
  99. ["FIVE", 55],
  100. ["TEN", 20],
  101. ["TWENTY", 60],
  102. ["ONE HUNDRED", 100]
  103. ])
  104. );
  105. //{status: "OPEN", change: [["TWENTY", 60], ["TEN", 20], ["FIVE", 15], ["ONE", 1], ["QUARTER", 0.5], ["DIME", 0.2], ["PENNY", 0.04]]}
  106. console.log(
  107. checkCashRegister(3.26, 100, [
  108. ["PENNY", 1.01],
  109. ["NICKEL", 2.05],
  110. ["DIME", 3.1],
  111. ["QUARTER", 4.25],
  112. ["ONE", 90],
  113. ["FIVE", 55],
  114. ["TEN", 20],
  115. ["TWENTY", 60],
  116. ["ONE HUNDRED", 100]
  117. ])
  118. );
  119. //{status: "INSUFFICIENT_FUNDS", change: []}.
  120. console.log(
  121. checkCashRegister(19.5, 20, [
  122. ["PENNY", 0.01],
  123. ["NICKEL", 0],
  124. ["DIME", 0],
  125. ["QUARTER", 0],
  126. ["ONE", 1],
  127. ["FIVE", 0],
  128. ["TEN", 0],
  129. ["TWENTY", 0],
  130. ["ONE HUNDRED", 0]
  131. ])
  132. );
  133. //{status: "CLOSED", change: [["PENNY", 0.5], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]}
  134. // console.log(
  135. // checkCashRegister(19.5, 20, [
  136. // ["PENNY", 0.5],
  137. // ["NICKEL", 0],
  138. // ["DIME", 0],
  139. // ["QUARTER", 0],
  140. // ["ONE", 0],
  141. // ["FIVE", 0],
  142. // ["TEN", 0],
  143. // ["TWENTY", 0],
  144. // ["ONE HUNDRED", 0]
  145. // ])
  146. // );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement