Advertisement
Guest User

Untitled

a guest
Jan 30th, 2015
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.23 KB | None | 0 0
  1. Array.prototype.sliceByIndex = function(idxs){
  2. var items = this;
  3. var slicedVals = idxs.map(function(idx){
  4. return items[idx];
  5. });
  6. return slicedVals;
  7. }
  8.  
  9. var range = function(min,max){
  10. var nums = [];
  11. for (var num = min; num <= max; num++){
  12. nums.push(num);
  13. }
  14. return nums;
  15. }
  16.  
  17. Array.prototype.permutation = function(n){
  18. var items = this;
  19. var length = items.length;
  20.  
  21. var idxs = range(0,length-1);
  22. var idxPerms = idxs.map(function(idx){
  23. return [idx];
  24. });
  25.  
  26. for (var i = 0; i < n-1; i++){
  27. var nextIdxPerms = [];
  28. idxPerms.forEach(function(idxPerm){
  29. var nextIdxs = idxs.filter(function(idx){
  30. return idxPerm.indexOf(idx) === -1; //
  31. });
  32.  
  33. nextIdxs.forEach(function(nextIdx){
  34. var nextIdxPerm = idxPerm.slice(0);
  35. nextIdxPerm.push(nextIdx);
  36. nextIdxPerms.push(nextIdxPerm);
  37. });
  38. });
  39. idxPerms = nextIdxPerms.slice(0);
  40. }
  41.  
  42. perms = idxPerms.map(function(idxPerm){
  43. return items.sliceByIndex(idxPerm);
  44. });
  45. return perms;
  46. }
  47.  
  48. Array.prototype.repeatedPermutation = function(n){
  49. var items = this;
  50. var length = items.length;
  51.  
  52. var idxs = range(0,length-1);
  53. var idxPerms = idxs.map(function(idx){
  54. return [idx];
  55. });
  56.  
  57. for (var i = 0; i < n-1; i++){
  58. var nextIdxPerms = [];
  59. idxPerms.forEach(function(idxPerm){
  60. idxs.forEach(function(idx){
  61. var nextIdxPerm = idxPerm.slice(0);
  62. nextIdxPerm.push(idx);
  63. nextIdxPerms.push(nextIdxPerm);
  64. });
  65. });
  66. idxPerms = nextIdxPerms.slice(0);
  67. }
  68.  
  69. perms = idxPerms.map(function(idxPerm){
  70. return items.sliceByIndex(idxPerm);
  71. });
  72. return perms;
  73. }
  74.  
  75. Array.prototype.powerSet = function(){
  76. var items = this;
  77. var length = items.length;
  78.  
  79. var binarys = [true,false].repeatedPermutation(length);
  80. var trueIdxs = binarys.map(function(binary){
  81. return binary.allIndexOf(true);
  82. });
  83. var subsets = trueIdxs.map(function(trueIdx){
  84. return items.sliceByIndex(trueIdx);
  85. });
  86. return subsets;
  87. }
  88.  
  89. Array.prototype.combination = function(n){
  90. var items = this;
  91. var length = items.length;
  92.  
  93. var idxs = range(0,length-1);
  94. var idxPerms = idxs.map(function(idx){
  95. return [idx];
  96. });
  97.  
  98. for (var idxsIdx = 0; idxsIdx < n-1; idxsIdx++){
  99. var nextIdxPerms = [];
  100. idxPerms.forEach(function(idxPerm){
  101. var lastIdx = idxPerm[idxsIdx];
  102. var nextIdxs = idxs.filter(function(idx){
  103. return lastIdx < idx;
  104. });
  105. nextIdxs.forEach(function(nextIdx){
  106. var nextIdxPerm = idxPerm.slice(0);
  107. nextIdxPerm.push(nextIdx);
  108. nextIdxPerms.push(nextIdxPerm);
  109. });
  110. });
  111. idxPerms = nextIdxPerms.slice(0);
  112. }
  113.  
  114. perms = idxPerms.map(function(idxPerm){
  115. return items.sliceByIndex(idxPerm);
  116. });
  117. return perms;
  118. }
  119.  
  120.  
  121. Array.prototype.repeatedCombination = function(n){
  122. var items = this;
  123. var length = items.length;
  124.  
  125. var idxs = range(0,length-1);
  126. var idxPerms = idxs.map(function(idx){
  127. return [idx];
  128. });
  129.  
  130. for (var idxsIdx = 0; idxsIdx < n-1; idxsIdx++){
  131. var nextIdxPerms = [];
  132. idxPerms.forEach(function(idxPerm){
  133. var lastIdx = idxPerm[idxsIdx];
  134. var nextIdxs = idxs.filter(function(idx){
  135. return lastIdx <= idx;
  136. });
  137. nextIdxs.forEach(function(nextIdx){
  138. var nextIdxPerm = idxPerm.slice(0);
  139. nextIdxPerm.push(nextIdx);
  140. nextIdxPerms.push(nextIdxPerm);
  141. });
  142. });
  143. idxPerms = nextIdxPerms.slice(0);
  144. }
  145.  
  146. perms = idxPerms.map(function(idxPerm){
  147. return items.sliceByIndex(idxPerm);
  148. });
  149. return perms;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement