Permutation defines a protocol for calculating all possible permutations of
a given type of data. The protocol may be implemented for any type of custom
data which requires the calcuation of permutations (or combintations).
Examples
MapSets are used when members have no inherent order:
iex> mapset = MapSet.new([:paris, :rome, :tokyo, :budapest])
#MapSet<[:budapest, :paris, :rome, :tokyo]>
iex> Permutation.permute(mapset)
{:ok, #MapSet<[#MapSet<[:budapest, :paris, :rome, :tokyo]>]>}Lists are used when the members ARE ordered:
iex> Permutation.permute([:a, :b, :c])
{:ok,
#MapSet<[
[:a, :b, :c],
[:a, :c, :b],
[:b, :a, :c],
[:b, :c, :a],
[:c, :a, :b],
[:c, :b, :a]
]>}
Summary
Functions
Find all possible combinations of the collection's members, returned as a MapSet.
As with Permutation.permute/2 but raises on error.
Types
@type t() :: term()
All the types that implement this protocol.
Functions
Find all possible combinations of the collection's members, returned as a MapSet.
Options
:cardinalitythe maximum size of the resulting subsets
As with Permutation.permute/2 but raises on error.