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 / 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 / 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 / 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 / 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 / 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 / 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 / bin2text_text2bin.js
Last active August 29, 2015 13:56
A couple of javascript one liners for easily converting text message to binary and binary messages to text.
function text2bin(msg) { return msg.split('').map(function(x) { var b = x.charCodeAt(0).toString(2); return Array(9 - b.length).join(0) + b; }).join(''); }
function bin2text(bin) { return bin.match(/(.{1,8})/g).map(function(x) { return String.fromCharCode(parseInt(x, 2)) }).join(''); }
@jremmen
jremmen / im.js
Created March 9, 2014 00:14
js: generate n x n identity matrix
function im(n) { var a = Array.apply(null, new Array(n)); return a.map(function(x, i) { return a.map(function(y, k) { return i === k ? 1 : 0; }) }) }
@jremmen
jremmen / mm.js
Last active May 7, 2024 01:39
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 / zipw.js
Last active August 29, 2015 13:57
js: zip with function, takes 2 lists/arrays and zips them by mapping function (f) over each pair
zipw = function(a,b,f) {
var c = a.length < b.length ? {a:a, b:b} : {a:b, b:a};
return c.a.map(function(x,i) {
return f(x,c.b[i]);
});
}
zipw([1,2,3],[10,11,12], function(x,y) { return x + y; }); // [11,13,15]
zipw([1,2,3],[10,11,12], function(x,y) { return x * y; }); // [10,22,36]