Using C from Elixir with NIFs Released Mandrake v0.0.4: https://hex.pm/packages/mandrake

RangeExtras: O(1) set operations and random sampling for ranges

RangeExtras gives you fast set operations and random sampling:

iex> RangeExtras.union(1..4, 3..5)
[1..5]

iex> RangeExtras.difference(8..1, 4..4)
[8..5, 3..1]

iex> RangeExtras.intersection(8..1, -4..0)
[]

iex> RangeExtras.random(1..1_000_000)
166577

RangeExtras.random/1 benchmarked against Enum.random/1:

RangeExtras.random(1..1000)         0.89 µs/op
Enum.random(1..1000)                375.37 µs/op

RangeExtras.random(1..1_000_000)    0.90 µs/op
Enum.random(1..1_000_000)           385288.60 µs/op

I hope you find this useful! Grab it from Hex.