# publicpostmodern/combinatorics

### Subversion checkout URL

You can clone with HTTPS or Subversion.

Bringing (more) Combinatorics to Ruby.

Fetching latest commitâ€¦

Cannot retrieve the latest commit at this time

 benchmarks lib spec .document .gitignore October 02, 2010 .rspec October 10, 2010 .yardopts October 17, 2010 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
``````