README.md

# Brute

#### [Documentation](https://hexdocs.pm/brute)

Brute is a package that generates
[combinations](https://en.wikipedia.org/wiki/Combination) of various
characters.

For example, Brute can generate the combinations for the set `{a b c}`:

```elixir
Brute.generic(?a..?c, 1..3)
```

Will generate something similar to the following: a, b , c, ..., z, aa, ab,
..., zy, zz, ... aaa, aab, ..., zzy, zzz.

**There is no order guarantee within set-length**.


Since most functions in `Brute` return a stream, they can combined with other
operations. For example, calculating a hash:

```elixir
'abcdefghijkpqrstuvwxyzABCDEFGHIJKPQRSTUVWXYZ0123456789`~!@#$%^&*()_+{}:<>?"\'`'
|> Brute.generic(1..20)
|> Stream.map(fn str ->
  :crypto.hash(:sha, str) |> Base.encode16
end)
```

## Installation

```elixir
def deps do
  [{:brute, "~> 0.1.0"}]
end
```

If you are using Elixir 1.3 or lower you will also need to add `brute` to your applications.

```elixir
def application do
  [ ... applications: [ ..., :brute ] ]
end
```

## TODO

- [ ] Benchmarks
- [ ] Caching combinations