Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- "use strict"
- const expect = require('expect.js')
- const coinTypes = {
- "0.01": "Pennies",
- "0.05": "Nickels",
- "0.10": "Dimes",
- "0.25": "Quarters",
- "0.50": "Quarters",
- "1.00": "Dollars",
- }
- class PocketChange {
- static createResults() {
- return Object.values(coinTypes).reduce(function(result, value) {
- result[value] = 0
- return result
- }, {})
- }
- static sort(change) {
- var results = this.createResults()
- results["total"] = 0.0
- change.map((c) => {
- results[coinTypes[c.toFixed(2)]] += 1
- results["total"] += c
- })
- results["total"] = Number(results.total.toFixed(2))
- return results
- }
- static mergeSort(change) {
- if (change.length < 2 ) {
- return change
- }
- let mid = parseInt(change.length / 2)
- let left = change.slice(0, mid)
- let right = change.slice(mid)
- return this.merge(this.mergeSort(left), this.mergeSort(right))
- }
- static merge(left, right) {
- var results = []
- while(left.length || right.length) {
- if (left.length && right.length) {
- if (left[0] < right[0]) {
- results.push(left.shift())
- } else {
- results.push(right.shift())
- }
- } else if (left.length) {
- results.push(left.shift())
- } else if (right.length) {
- results.push(right.shift())
- }
- }
- return results
- }
- }
- var change = [0.25, 0.01, 0.05, 0.10, 0.50, 1.00]
- var results = PocketChange.sort(change)
- expect(results).to.eql({
- Pennies: 1,
- Nickels: 1,
- Dimes: 1,
- Quarters: 2,
- Dollars: 1,
- total: 1.91
- })
- 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]
- results = PocketChange.sort(change)
- expect(results).to.eql({
- Pennies: 5,
- Nickels: 2,
- Dimes: 3,
- Quarters: 4,
- Dollars: 1,
- total: 2.7
- })
- // using mergeSort
- 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]
- results = PocketChange.mergeSort(change)
- 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