2015-07-11 12 views
8

Próbuję utworzyć funkcję _.combinations (podkreślenie mixin), która przyjmuje trzy parametry: arr, pockets, duplicates. Oto test, który zaprojektowałem, aby pokazać, jak powinno wyglądać zachowanie.Funkcja zwracająca tablicę kombinacji tablic

expect(_.combinations([1, 2], 1, false)).to.be.equal([[1],[2]]) 
expect(_.combinations([1, 2], 1, true)).to.be.equal([[1],[2]]) 
expect(_.combinations([1, 2, 3], 2, false)).to.be.equal([[1,2],[1,3],[2,3]]) 
expect(_.combinations([1, 2, 3], 2, true)).to.be.equal([[1,2],[1,3],[2,3],[2,1],[3,1],[3,2]]) 
expect(_.combinations([1, 2, 3, 4], 3, false)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,4],[3,4,1]]) 
expect(_.combinations([1, 2, 3, 4], 3, true)).to.be.equal([[1,2,3],[1,2,4],[1,3,4],[2,1,4],[2,3,1],[2,3,4],[3,1,2],[3,4,1],[3,4,2],[4,1,2],[4,1,3],[4,2,3]]) 

Zastanawiam się, zanim pójdę i utworzę tę funkcję, jeśli już istnieje w bibliotece. Być może ta określona funkcja ma już nazwę, której nie znam.

Czy jest coś, co to robi?

+2

Jako punkt wyjścia, można skorzystać z zestawu [Power] (https://en.wikipedia.org/wiki/Power_set) Funkcja wyszukiwania (tylko dla niego, wiele osób pisało funkcje it), aby pobrać kombinacje. Stamtąd powinno być względnie proste filtrowanie na podstawie innych argumentów. –

Odpowiedz

6

This Biblioteka ma dobrą funkcję. Myślę, że to prawie wszystko, czego potrzebujesz.

var combinatorics=require('/path/to/combinatorics'); 

var a = [1,2,3]; 

var ans1=combinatorics.permutation(a,2); 
console.log(ans1.toArray());// [[1,2],[2,1],[1,3],[3,1],[2,3],[3,2]] like when duplicates is set to true 


var ans2=combinatorics.combination(a,2); 
console.log(ans2.toArray());//[[1,2],[2,1],[1,3],[3,1],[2,3],[3,2]] like when duplicates is set to false 
+0

To wygląda niesamowicie Jestem prawie pewien, że ma wszystko, czego chcę :) – ThomasReggi

+0

tak ... repozytorium github ma całkiem jasne instrukcje i przykłady ... – Pravin

Powiązane problemy