Skip to content

Instantly share code, notes, and snippets.

@shinout
Created February 29, 2012 01:30
Show Gist options
  • Save shinout/1936818 to your computer and use it in GitHub Desktop.
Save shinout/1936818 to your computer and use it in GitHub Desktop.
cap, cup
function unique(arr) {
var ret = [];
for(var i=0, l=arr.length; i<l; i++) {
for(var j=i+1; j<l; j++) {
if (arr[i] === arr[j]) j = ++i;
}
ret.push(arr[i]);
}
return ret;
};
function cup(arr) {
return unique(Array.prototype.concat.apply([], arr));
}
function cap(arr) {
if (!arr.length) return [];
var current = ret = arr.shift(), target;
var n = 0, len = arr.length;
while(n < len) {
ret = [], target = arr[n++];
for(var i=0, l=current.length; i<l; i++) {
for(var j=0, l2=target.length; j<l2; j++) {
if (current[i] === target[j]) ret.push(current[i]);
}
}
current = ret;
}
return unique(ret);
};
var sample1 = [
[1,6,9,4,5,2,2,4],
[3,6,3,6,6,2,3],
[1,8,9,4,2,8,3,2],
[1,2,2,9,5,5,4,6],
[0,1,9,6,5,4,2,6],
[2,7,9,8,1,1,3,7],
[4,3,7,0,1,8,2,7]
];
console.log(sample1.slice());
console.log(cap(sample1.slice()));
console.log(cup(sample1.slice()));
var N = 10000;
console.time("cap");
for (var i=0; i<N; i++) var v1 = cap(sample1.slice())
console.timeEnd("cap");
console.time("cup");
for (var i=0; i<N; i++) var v1 = cup(sample1.slice())
console.timeEnd("cup");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment