Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #!/usr/bin/env node
  2. "use strict"
  3.  
  4. const expect = require('expect.js')
  5. const coinTypes = {
  6. "0.01": "Pennies",
  7. "0.05": "Nickels",
  8. "0.10": "Dimes",
  9. "0.25": "Quarters",
  10. "0.50": "Quarters",
  11. "1.00": "Dollars",
  12. }
  13.  
  14. class PocketChange {
  15. static createResults() {
  16. return Object.values(coinTypes).reduce(function(result, value) {
  17. result[value] = 0
  18. return result
  19. }, {})
  20. }
  21.  
  22. static sort(change) {
  23. var results = this.createResults()
  24. results["total"] = 0.0
  25. change.map((c) => {
  26. results[coinTypes[c.toFixed(2)]] += 1
  27. results["total"] += c
  28. })
  29. results["total"] = Number(results.total.toFixed(2))
  30. return results
  31. }
  32.  
  33. static mergeSort(change) {
  34. if (change.length < 2 ) {
  35. return change
  36. }
  37.  
  38. let mid = parseInt(change.length / 2)
  39. let left = change.slice(0, mid)
  40. let right = change.slice(mid)
  41. return this.merge(this.mergeSort(left), this.mergeSort(right))
  42. }
  43.  
  44. static merge(left, right) {
  45. var results = []
  46. while(left.length || right.length) {
  47. if (left.length && right.length) {
  48. if (left[0] < right[0]) {
  49. results.push(left.shift())
  50. } else {
  51. results.push(right.shift())
  52. }
  53. } else if (left.length) {
  54. results.push(left.shift())
  55. } else if (right.length) {
  56. results.push(right.shift())
  57. }
  58. }
  59. return results
  60. }
  61. }
  62.  
  63.  
  64. var change = [0.25, 0.01, 0.05, 0.10, 0.50, 1.00]
  65. var results = PocketChange.sort(change)
  66. expect(results).to.eql({
  67. Pennies: 1,
  68. Nickels: 1,
  69. Dimes: 1,
  70. Quarters: 2,
  71. Dollars: 1,
  72. total: 1.91
  73. })
  74.  
  75. change = [0.25, 0.25, 0.01, 0.05, 0.25, 0.01, 0.10, 0.50, 0.10, 1.00, 0.10, 0.05, 0.01, 0.01, 0.01]
  76. results = PocketChange.sort(change)
  77. expect(results).to.eql({
  78. Pennies: 5,
  79. Nickels: 2,
  80. Dimes: 3,
  81. Quarters: 4,
  82. Dollars: 1,
  83. total: 2.7
  84. })
  85.  
  86. // using mergeSort
  87. change = [0.25, 0.25, 0.01, 0.05, 0.25, 0.01, 0.10, 0.50, 0.10, 1.00, 0.10, 0.05, 0.01, 0.01, 0.01]
  88. results = PocketChange.mergeSort(change)
  89. expect(results).to.eql([0.01, 0.01, 0.01, 0.01, 0.01, 0.05, 0.05, 0.1, 0.1, 0.1, 0.25, 0.25, 0.25, 0.5, 1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement