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
var List = function() {
return (function build(xs) {
if(xs.length === 0) return Nil
return new Cons(xs[0], build(Array.prototype.slice.call(xs, 1)));
})(arguments);
}
var Nil = {
head: null,
tail: null,
var Empty = {
contains: function(x) { return false; },
incl: function(x) { return new NonEmpty(x, Empty, Empty); },
union: function(other) { return other; },
toString: function() { return '.'; }
};
var NonEmpty = function(elem, left, right) {
return {
@jremmen
jremmen / insert_sort.js
Created May 30, 2014 05:31
js: insert sort
Sorting = {
insert_sort: function(xs) {
function insert(x, xs) {
if(xs.length === 0) return [x];
else return x <= xs[0] ? [x].concat(xs) : [xs[0]].concat(insert(x, xs.slice(1)));
}
return xs.length === 0 ? [] : insert(xs[0], this.insert_sort(xs.slice(1)));
@jremmen
jremmen / isequal.js
Last active August 29, 2015 14:01
js: object/array isEqual method
Object.prototype.isEqual = function(obj) {
function iter(a, b) {
for(p in a) {
if(a.hasOwnProperty(p)) {
if(!b.hasOwnProperty(p)) return false;
else if(['array', 'object'].indexOf(typeof b[p]) > -1) {
if(!iter(b[p], a[p])) return false;
@jremmen
jremmen / featurescale.js
Last active August 29, 2015 13:57
js: feature scaling using max - min or standard deviation
scale = function(a,d) { return a.map(function(x) { return (x - avg(a)) / d}) }
avg = function(a) { return sum(a) / a.length }
sum = function(a) { return a.reduce(function(x,y) { return x + y; }) }
max = function(a) { return a.sort(function(x,y) { return x < y; })[0] }
min = function(a) { return a.sort(function(x,y) { return x > y; })[0] }
sd = function(a,av) { return Math.sqrt(avg(a.map(function(x) { return (x - av) * x; }))); }
z = [20,25,10,33,50,42,19]
scale(z,(max(z) - min(z))) // [-0.2107142857142857, -0.23571428571428568, -0.2107142857142857, -0.08571428571428567, 0.11428571428571432, 0.3392857142857143, 0.5392857142857144]
@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]
@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 / 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 / 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 / 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); }