Combination: n Choose r
Algorithm for choosing n items out of r from a given collection of items.
by Ahmad Baktash Hayeri
JavaScript
var items = ['A', 'B', 'C', 'D'];
function chooseRofN (items, r){
var chosen = [];
if(r > items.length) return;
if(r === 1 && items.length === 1) {
chosen.push(items);
return chosen;
}
for(var n = 0; n < items.length; n++){
for(var t = 0; t < items.length-1; t++){
var pivot = items[t];
for(var i = t + 1; i < items.length - (r-2); i++){
pluck = [];
pluck.push(pivot);
for(var j = 0; j < r-1; j++){
pluck.push(items[i+j])
}
if(!hasEqualArray(chosen, pluck)){
chosen.push(pluck);
}
}
var temp = items[t];
items[t] = items[t+1];
items[t+1] = temp;
}
}
return chosen;
}
function hasEqualArray(collection, match){
for(var i = 0; i < collection.length; i++){
if (collection[i].length !== match.length) continue;
if(isEqual(collection[i], match)){
return true;
}
}
return false;
}
function isEqual(arr1, arr2){
arr1.sort(sortCallback);
arr2.sort(sortCallback);
for(var i = 0; i < arr1.length; i++){
if(arr1[i] !== arr2[i]){
return false
}
}
return true;
}
function sortCallback(a, b){
return a > b;
}
function print(arr){
for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}
}
var chosen = chooseRofN(items, 1);
print(chosen);