#logic #combination #collection #math #iterator #values #2d

no-std combinatory

Create every combination possible of values of 2D collections / iterators

1 stable release

1.0.0 Oct 23, 2024

#159 in No standard library

Custom license

18KB
99 lines

Combinatory

crates.io docs.rs GitHub Actions Workflow Status GitHub last commit GitHub License

You are reading the documentation for combinatory version 1.0.0

Allows to combinate values of two dimensional iterators / collections.

For example, the combinations of each value [1, 2] with the values [a, b] are:

  • (1,a).
  • (1,b).
  • (2,a).
  • (2,b).

The following code shows every combination of a menu-deal composed of a main, a side, and a dessert, having two options for each:

use combinatory::Combinatory;

const SIDES: &[&'static str] = &["Soup", "Bread and butter"];
const MAIN: &[&'static str] = &["Chicken", "Burger with fries"];
const DESSERTS: &[&'static str] = &["Vanilla ice cream", "Souffle"];

let possible_menus = Combinatory::new([SIDES, MAIN, DESSERTS])
    .ref_combinations()
    .enumerate()
    .map(|(menu_index, possible_menu)| {
        format!("{} - {}", menu_index + 1, possible_menu
            .map(|string|string.to_string()).collect::<Vec<_>>().join(", "))
    })
    .collect::<Vec<_>>()
    .join("\n");

println!("{possible_menus}");

assert_eq!(possible_menus,
"1 - Soup, Chicken, Vanilla ice cream
2 - Soup, Chicken, Souffle
3 - Soup, Burger with fries, Vanilla ice cream
4 - Soup, Burger with fries, Souffle
5 - Bread and butter, Chicken, Vanilla ice cream
6 - Bread and butter, Chicken, Souffle
7 - Bread and butter, Burger with fries, Vanilla ice cream
8 - Bread and butter, Burger with fries, Souffle");

This code will print:

1 - Soup, Chicken, Vanilla ice cream
2 - Bread and butter, Chicken, Vanilla ice cream
3 - Soup, Fillet with fries, Vanilla ice cream
4 - Bread and butter, Fillet with fries, Vanilla ice cream
5 - Soup, Chicken, Souffle
6 - Bread and butter, Chicken, Souffle
7 - Soup, Fillet with fries, Souffle
8 - Bread and butter, Fillet with fries, Souffle

No runtime deps