Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Array.prototype.sliceByIndex = function(idxs){
- var items = this;
- var slicedVals = idxs.map(function(idx){
- return items[idx];
- });
- return slicedVals;
- }
- var range = function(min,max){
- var nums = [];
- for (var num = min; num <= max; num++){
- nums.push(num);
- }
- return nums;
- }
- Array.prototype.permutation = function(n){
- var items = this;
- var length = items.length;
- var idxs = range(0,length-1);
- var idxPerms = idxs.map(function(idx){
- return [idx];
- });
- for (var i = 0; i < n-1; i++){
- var nextIdxPerms = [];
- idxPerms.forEach(function(idxPerm){
- var nextIdxs = idxs.filter(function(idx){
- return idxPerm.indexOf(idx) === -1; //
- });
- nextIdxs.forEach(function(nextIdx){
- var nextIdxPerm = idxPerm.slice(0);
- nextIdxPerm.push(nextIdx);
- nextIdxPerms.push(nextIdxPerm);
- });
- });
- idxPerms = nextIdxPerms.slice(0);
- }
- perms = idxPerms.map(function(idxPerm){
- return items.sliceByIndex(idxPerm);
- });
- return perms;
- }
- Array.prototype.repeatedPermutation = function(n){
- var items = this;
- var length = items.length;
- var idxs = range(0,length-1);
- var idxPerms = idxs.map(function(idx){
- return [idx];
- });
- for (var i = 0; i < n-1; i++){
- var nextIdxPerms = [];
- idxPerms.forEach(function(idxPerm){
- idxs.forEach(function(idx){
- var nextIdxPerm = idxPerm.slice(0);
- nextIdxPerm.push(idx);
- nextIdxPerms.push(nextIdxPerm);
- });
- });
- idxPerms = nextIdxPerms.slice(0);
- }
- perms = idxPerms.map(function(idxPerm){
- return items.sliceByIndex(idxPerm);
- });
- return perms;
- }
- Array.prototype.powerSet = function(){
- var items = this;
- var length = items.length;
- var binarys = [true,false].repeatedPermutation(length);
- var trueIdxs = binarys.map(function(binary){
- return binary.allIndexOf(true);
- });
- var subsets = trueIdxs.map(function(trueIdx){
- return items.sliceByIndex(trueIdx);
- });
- return subsets;
- }
- Array.prototype.combination = function(n){
- var items = this;
- var length = items.length;
- var idxs = range(0,length-1);
- var idxPerms = idxs.map(function(idx){
- return [idx];
- });
- for (var idxsIdx = 0; idxsIdx < n-1; idxsIdx++){
- var nextIdxPerms = [];
- idxPerms.forEach(function(idxPerm){
- var lastIdx = idxPerm[idxsIdx];
- var nextIdxs = idxs.filter(function(idx){
- return lastIdx < idx;
- });
- nextIdxs.forEach(function(nextIdx){
- var nextIdxPerm = idxPerm.slice(0);
- nextIdxPerm.push(nextIdx);
- nextIdxPerms.push(nextIdxPerm);
- });
- });
- idxPerms = nextIdxPerms.slice(0);
- }
- perms = idxPerms.map(function(idxPerm){
- return items.sliceByIndex(idxPerm);
- });
- return perms;
- }
- Array.prototype.repeatedCombination = function(n){
- var items = this;
- var length = items.length;
- var idxs = range(0,length-1);
- var idxPerms = idxs.map(function(idx){
- return [idx];
- });
- for (var idxsIdx = 0; idxsIdx < n-1; idxsIdx++){
- var nextIdxPerms = [];
- idxPerms.forEach(function(idxPerm){
- var lastIdx = idxPerm[idxsIdx];
- var nextIdxs = idxs.filter(function(idx){
- return lastIdx <= idx;
- });
- nextIdxs.forEach(function(nextIdx){
- var nextIdxPerm = idxPerm.slice(0);
- nextIdxPerm.push(nextIdx);
- nextIdxPerms.push(nextIdxPerm);
- });
- });
- idxPerms = nextIdxPerms.slice(0);
- }
- perms = idxPerms.map(function(idxPerm){
- return items.sliceByIndex(idxPerm);
- });
- return perms;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement