Skip to content

Instantly share code, notes, and snippets.

@earlonrails
Last active July 24, 2017 21:53
Show Gist options
  • Save earlonrails/dbb30a0a17f31035a7e28eba98cc36eb to your computer and use it in GitHub Desktop.
Save earlonrails/dbb30a0a17f31035a7e28eba98cc36eb to your computer and use it in GitHub Desktop.
Sort some pocket change in es6!
#!/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])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment