# `Algo`
[🔗](https://github.com/alexkorban/algo/blob/main/lib/algo.ex#L1)

A collection of utility functions for working with lists, maps, keyword lists, and strings.
This module is a convenience wrapper around the various `Algo` submodules, providing a single
namespace for importing functions.

# `all_different?`

```elixir
@spec all_different?(Enumerable.t()) :: boolean()
```

Returns whether every element in an enumerable is unique.

## Examples

    iex> Algo.all_different?([1, 2, 3])
    true

    iex> Algo.all_different?([1, 2, 1])
    false

# `all_different_by?`

```elixir
@spec all_different_by?(Enumerable.t(), (any() -&gt; any())) :: boolean()
```

Returns whether all elements are unique after applying a function.

## Examples

    iex> Algo.all_different_by?(["a", "bb", "ccc"], &String.length/1)
    true

    iex> Algo.all_different_by?(["a", "b"], &String.length/1)
    false

# `eq_by?`

```elixir
@spec eq_by?((any() -&gt; any())) :: (any(), any() -&gt; boolean())
```

Returns a comparator that checks equality after applying a function.

## Examples

    iex> same_length? = Algo.eq_by?(&String.length/1)
    iex> same_length?.("a", "b")
    true

    iex> same_length? = Algo.eq_by?(&String.length/1)
    iex> same_length?.("a", "bb")
    false

    iex> Algo.unique_with(["a", "bb", "c"], Algo.eq_by?(&String.length/1))
    ["a", "bb"]

# `chunk_while_adjacent`

# `difference_by`

# `difference_with`

# `get_cartesian_product`

# `get_permutations`

# `get_subsequences`

# `get_symmetric_difference_by`

# `get_symmetric_difference_with`

# `get_unique_pairs`

# `index_by`

# `inner_join`

# `intersect_by`

# `intersect_with`

# `interweave`

# `map_accum`

# `map_accum_right`

# `move_at`

# `partition_map`

# `reduce_by`

# `split_whenever`

# `transpose`

# `unique_with`

# `unwind`

# `as_keyword_list`

# `as_map`

# `atomise_keys_with`

# `atomize_keys_with`

# `deep_merge_left`

# `deep_merge_right`

# `deep_merge_with`

# `delete_path`

# `each_breadth_first`

# `each_depth_first`

# `equivalent?`

# `evolve`

# `fetch_path`

# `fetch_path!`

# `get_depth`

# `get_path`

# `get_paths`

# `get_values_at_paths`

# `has_path?`

# `invert`

# `merge_left`

# `merge_right`

# `path_satisfies?`

# `project`

# `prop`

# `props`

# `put_new_path`

# `put_path`

# `rename_keys`

# `replace_path`

# `replace_path!`

# `stringify_keys`

# `unnest_keys`

# `update_path`

# `update_path!`

# `where_all?`

# `where_any?`

# `where_eq?`

# `humanise`

# `humanize`

---

*Consult [api-reference.md](api-reference.md) for complete listing*
