mirror of
https://github.com/sigmasternchen/gleam-community-maths
synced 2025-03-15 07:59:01 +00:00
Merge pull request #30 from versecafe/fix-cartesian-product-types
Allow cartesian product of (a, b) instead of only (a, a)
This commit is contained in:
commit
3254597cef
2 changed files with 11 additions and 4 deletions
|
@ -652,10 +652,10 @@ fn do_list_permutation_with_repetitions(
|
||||||
/// </a>
|
/// </a>
|
||||||
/// </div>
|
/// </div>
|
||||||
///
|
///
|
||||||
pub fn cartesian_product(xset: set.Set(a), yset: set.Set(a)) -> set.Set(#(a, a)) {
|
pub fn cartesian_product(xset: set.Set(a), yset: set.Set(b)) -> set.Set(#(a, b)) {
|
||||||
xset
|
xset
|
||||||
|> set.fold(set.new(), fn(accumulator0: set.Set(#(a, a)), member0: a) {
|
|> set.fold(set.new(), fn(accumulator0: set.Set(#(a, b)), member0: a) {
|
||||||
set.fold(yset, accumulator0, fn(accumulator1: set.Set(#(a, a)), member1: a) {
|
set.fold(yset, accumulator0, fn(accumulator1: set.Set(#(a, b)), member1: b) {
|
||||||
set.insert(accumulator1, #(member0, member1))
|
set.insert(accumulator1, #(member0, member1))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -72,7 +72,7 @@ pub fn int_combination_test() {
|
||||||
|
|
||||||
combinatorics.combination(7, 5, option.Some(combinatorics.WithRepetitions))
|
combinatorics.combination(7, 5, option.Some(combinatorics.WithRepetitions))
|
||||||
|> should.equal(Ok(462))
|
|> should.equal(Ok(462))
|
||||||
// NOTE: Tests with the 'combination' function that produce values that exceed
|
// NOTE: Tests with the 'combination' function that produce values that exceed
|
||||||
// precision of the JavaScript 'Number' primitive will result in errors
|
// precision of the JavaScript 'Number' primitive will result in errors
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -697,4 +697,11 @@ pub fn example_test() {
|
||||||
|> should.equal(
|
|> should.equal(
|
||||||
set.from_list([#(1.0, 1.0), #(1.0, 2.0), #(10.0, 1.0), #(10.0, 2.0)]),
|
set.from_list([#(1.0, 1.0), #(1.0, 2.0), #(10.0, 1.0), #(10.0, 2.0)]),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Cartesian product of two sets with different types
|
||||||
|
set.from_list(["1", "10"])
|
||||||
|
|> combinatorics.cartesian_product(set.from_list([1.0, 2.0]))
|
||||||
|
|> should.equal(
|
||||||
|
set.from_list([#("1", 1.0), #("1", 2.0), #("10", 1.0), #("10", 2.0)]),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue