-USING: help.markup help.syntax kernel math math.order sequences ;
+USING: help.markup help.syntax math math.combinatorics
+math.combinatorics.private math.order sequences ;
IN: math.combinatorics
HELP: factorial
{ $values { "seq" sequence } { "permutations" sequence } }
{ $description "An efficient sequence containing the lexicographical permutations of " { $snippet "seq" } "." } ;
+HELP: <k-permutations>
+{ $values { "seq" sequence } { "k" integer } { "permutations" sequence } }
+{ $description "An efficient sequence containing the " { $snippet "k" } " lexicographical permutations of " { $snippet "seq" } "." } ;
+
HELP: all-permutations
{ $values { "seq" sequence } { "seq'" sequence } }
{ $description "Outputs a sequence containing all permutations of " { $snippet "seq" } " in lexicographical order." }
} ;
HELP: each-permutation
-{ $values { "seq" sequence } { "quot" { $quotation "( seq -- )" } } }
+{ $values { "seq" sequence } { "quot" { $quotation ( ... elt -- ... ) } } }
{ $description "Applies the quotation to each permutation of " { $snippet "seq" } " in order." } ;
HELP: inverse-permutation
{ $notes "Combinations are 0-based and a bounds error will be thrown if " { $snippet "m" } " is larger than " { $snippet "seq length k nCk" } "." }
{ $examples
{ $example "USING: math.combinatorics sequences prettyprint ;"
- "6 7 iota 4 combination ." "{ 0 1 3 6 }" }
+ "6 7 <iota> 4 combination ." "{ 0 1 3 6 }" }
{ $example "USING: math.combinatorics prettyprint ;"
"0 { \"a\" \"b\" \"c\" \"d\" } 2 combination ." "{ \"a\" \"b\" }" }
} ;
{ $examples
{ $example "USING: math.combinatorics prettyprint ;"
"{ \"a\" \"b\" \"c\" \"d\" } 2 all-combinations ."
-"""{
- { "a" "b" }
- { "a" "c" }
- { "a" "d" }
- { "b" "c" }
- { "b" "d" }
- { "c" "d" }
-}""" } } ;
+"{
+ { \"a\" \"b\" }
+ { \"a\" \"c\" }
+ { \"a\" \"d\" }
+ { \"b\" \"c\" }
+ { \"b\" \"d\" }
+ { \"c\" \"d\" }
+}" } } ;
HELP: each-combination
-{ $values { "seq" sequence } { "k" "a non-negative integer" } { "quot" { $quotation "( seq -- )" } } }
+{ $values { "seq" sequence } { "k" "a non-negative integer" } { "quot" { $quotation ( ... elt -- ... ) } } }
{ $description "Applies the quotation to each combination of " { $snippet "seq" } " choosing " { $snippet "k" } " elements, in order." } ;
-
-IN: math.combinatorics.private
-
HELP: factoradic
{ $values { "n" integer } { "factoradic" sequence } }
-{ $description "Converts a positive integer " { $snippet "n" } " to factoradic form. The factoradic of an integer is its representation based on a mixed radix numerical system that corresponds to the values of " { $snippet "n" } " factorial." }
-{ $examples { $example "USING: math.combinatorics.private prettyprint ;" "859 factoradic ." "{ 1 1 0 3 0 1 0 }" } } ;
+{ $description "Converts a positive integer " { $snippet "n" } " to factoradic form. The factoradic of an integer is its representation based on a mixed radix numerical system that corresponds to the values of " { $snippet "n" } " factorial." }
+{ $examples { $example "USING: math.combinatorics.private prettyprint ;" "859 factoradic ." "{ 1 1 0 3 0 1 0 }" } } ;
HELP: >permutation
{ $values { "factoradic" sequence } { "permutation" sequence } }
{ $notes "Performs an in-place modification of " { $snippet "seq" } "." }
{ $examples { $example "USING: math.combinatorics prettyprint ;" "\"ABC\" next-permutation ." "\"ACB\"" } } ;
+HELP: all-unique-permutations
+{ $values { "seq" sequence } { "seq'" sequence } }
+{ $description "Outputs a sequence containing all " { $strong "unique" } " permutations of " { $snippet "seq" } " in lexicographical order." }
+{ $examples
+ { $example "USING: math.combinatorics prettyprint ;"
+ "{ 1 1 2 } all-unique-permutations ."
+ "{ { 1 1 2 } { 1 2 1 } { 2 1 1 } }" }
+} ;
+
+HELP: each-unique-permutation
+{ $values { "seq" sequence } { "quot" { $quotation ( ... elt -- ... ) } } }
+{ $description "Applies the quotation to each " { $strong "unique" } " permutation of " { $snippet "seq" } " in order." } ;
+
HELP: all-subsets
{ $values { "seq" sequence } { "subsets" sequence } }
{ $description
}
} ;
-HELP: selections
-{ $values { "seq" sequence } { "n" integer } { "selections" sequence } }
+HELP: all-selections
+{ $values { "seq" sequence } { "n" integer } { "seq'" sequence } }
{ $description
"Returns all the ways to take n (possibly the same) items from the "
"sequence of items."
{ $examples
{ $example
"USING: math.combinatorics prettyprint ;"
- "{ 1 2 } 2 selections ."
+ "{ 1 2 } 2 all-selections ."
"{ { 1 1 } { 1 2 } { 2 1 } { 2 2 } }"
}
} ;