# postmodern/combinatorics

### Subversion checkout URL

You can clone with
or
.
Bringing (more) Combinatorics to Ruby.
Ruby
Fetching latest commit...
Cannot retrieve the latest commit at this time.
 Failed to load latest commit information. lib spec .document .gitignore .specopts .yardopts ChangeLog.md LICENSE.txt README.md Rakefile VERSION combinatorics.gemspec

# Combinatorics

## Description

A collection of modules and methods for performing Combinatoric calculations.

## Features

• Adds `powerset` to {Array} and {Set}.
• Added {Range#&}, {Range#upto} and {Range#downto}.

## Examples

Power-set of an {Array}:

``````require 'combinatorics/power_set'

[1,2,3,4].powerset
# => [[],
[4],
[3],
[3, 4],
[2],
[2, 4],
[2, 3],
[2, 3, 4],
[1],
[1, 4],
[1, 3],
[1, 3, 4],
[1, 2],
[1, 2, 4],
[1, 2, 3],
[1, 2, 3, 4]]
``````

Power-set of a {Set}:

``````Set['ab', 'cd', 'ef'].powerset
# => [#<Set: {}>,
#<Set: {"ef"}>,
#<Set: {"cd"}>,
#<Set: {"cd", "ef"}>,
#<Set: {"ab"}>,
#<Set: {"ab", "ef"}>,
#<Set: {"ab", "cd"}>,
#<Set: {"ab", "cd", "ef"}>]
``````

Find the intersecting sub-range between two ranges:

``````(1..50) & (20..100)
# => (20..50)
``````

Enumerate over every sub-range between two ranges:

``````(1..5).upto(2..10).to_a
# => [1..5, 1..6, 1..7, 1..8, 1..9, 1..10,
2..5, 2..6, 2..7, 2..8, 2..9, 2..10]
``````

List comprehensions:

``````require 'combinatorics/list_comprehension'

[(0..10).step(2),('a'..'c')].comprehension.to_a
# => [[0, "a"],
[0, "b"],
[0, "c"],
[2, "a"],
[2, "b"],
[2, "c"],
[4, "a"],
[4, "b"],
[4, "c"],
[6, "a"],
[6, "b"],
[6, "c"],
[8, "a"],
[8, "b"],
[8, "c"],
[10, "a"],
[10, "b"],
[10, "c"]]
``````

## Install

``````\$ sudo gem install combinatorics
``````