Skip to content

Instantly share code, notes, and snippets.

View jremmen's full-sized avatar

John Remmen jremmen

  • Planning Center
  • San Diego
View GitHub Profile
@jremmen
jremmen / mm.js
Last active October 13, 2022 18:16
js: matrix multiplication using dot product and transposition
mmultiply = function(a,b) {
return a.map(function(x,i) {
return transpose(b).map(function(y,k) {
return dotproduct(x, y)
});
});
}
dotproduct = function(a,b) {
return a.map(function(x,i) {
@jremmen
jremmen / knapsacktable.js
Created June 20, 2013 06:34
js:knapsack object, returns optimal solution in total value, total weight, items selected, and a binary selection process
var Knapsack = function(o) {
this.values = o.values;
this.weights = o.weights;
this.capacity = o.capacity;
this.createSolutionTable = function () {
this.table = this.initializeMatrix();
for(i = 1; i <= this.values.length; i++) {
for(k = 0; k < this.capacity; k++) {
@jremmen
jremmen / pointdistance.js
Created July 14, 2013 01:32
calculate distance between two points
var Point = function(x, y) {
this.x = x;
this.y = y;
};
function getDistance(a, b) {
return Math.sqrt(Math.pow((a.x - b.x), 2) + Math.pow((a.y - b.y), 2));
};
@jremmen
jremmen / submax.js
Created July 2, 2014 23:14
js: maximum sub array in linear time
// O(n)
Array.prototype.submax = function() {
var max = sum = 0;
for(var i = 0, l = this.length; i < l; i++) {
sum = Math.max(sum + this[i], 0);
max = Math.max(max, sum);
}
return max;
}
@jremmen
jremmen / pa.js
Created November 5, 2013 22:43
js: partial application example
calculate = function(a, f) { return a.reduce(function(x,y) { return f(x, y) }); }
sum = function(a, b) { return a + b; }
sub = function(a, b) { return a - b; }
sumAll = function(a) { return calculate(a, sum); }
subAll = function(a) { return calculate(a, sub); }
@jremmen
jremmen / recursiveMinMax.js
Last active December 20, 2015 08:19
js: recursive max and min with partial application
var max = reduce(function(a, b) { return a > b; });
var min = reduce(function(a, b) { return a < b; });
function reduce(p) {
return function(a) {
function iter(a, c) {
if(a.length === 0) return c;
else return iter(a.slice(1), p(a[0], c) ? a[0] : c);
}
return iter(a.slice(1), a[0]);
@jremmen
jremmen / quicksort.js
Created July 22, 2013 01:03
js: quicksort
function quick_sort(a) {
var m = a.length;
if(m <= 1) return a;
var v = a.shift();
var l = [];
var r = [];
@jremmen
jremmen / mergesort.js
Created July 4, 2013 00:11
js: merge sort
function mergesort(list) {
if(list.length <= 1) return list;
var l = mergesort(list.slice(0, list.length / 2));
var r = mergesort(list.slice(list.length / 2));
return merge(l, r);
}
function merge(l, r) {
var result = [];
while(l.length > 0 || r.length > 0) {
@jremmen
jremmen / objectpluck.js
Last active December 18, 2015 22:29
js: recursive pluck for javascript objects
function opop(obj,k) {
for(o in obj) {
if(o == k) {
result = obj[o];
delete obj[o];
return result;
}
else if(typeof obj[o] == 'object' && obj[o].constructor == Object) {
if(a = opop(obj[o], k)) return a;
}
@jremmen
jremmen / optimisticvalue.js
Last active December 18, 2015 21:19
js: optimistic value using linear relaxtion
function generateSortedWorth() {
return options.values.map(function(x, i) {
return {
index: i,
worth: x / options.weights[i],
};
}).sort(function(a, b) {
return a.worth > b.worth ? -1 : 1;
});
}