set_partition 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .ruby-gemset
7
+ .ruby-version
8
+ Gemfile.lock
9
+ InstalledFiles
10
+ _yardoc
11
+ coverage
12
+ doc/
13
+ lib/bundler/man
14
+ pkg
15
+ rdoc
16
+ spec/reports
17
+ test/tmp
18
+ test/version_tmp
19
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in set_partition.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Teja Sophista V.R.
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # SetPartition
2
+
3
+ Ruby implementation of [Partition of a Set](http://en.wikipedia.org/wiki/Partition_of_a_set) based on paper *Efficient Generation of Set Partitions* by [Michael Orlov](mailto:orlovm@cs.bgu.ac.il)
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'set_partition'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install set_partition
18
+
19
+ ## Usage
20
+
21
+ set_partition = SetPartition::Generator.new 4
22
+ set_partition.start #=> [0,0,0,0]
23
+ set_partition.next #=> [0,0,0,1]
24
+ set_partition.next #=> [0,0,1,0]
25
+
26
+ set_partition = SetPartition::FixedGenerator.new 4, 2
27
+ set_partition.start #=> [0,0,0,1]
28
+ set_partition.next #=> [0,0,1,0]
29
+ set_partition.next #=> [0,0,1,1]
30
+
31
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d]
32
+ set_partition.start #=> [[:a,:b,:c,:d]] # [0,0,0,0]
33
+ set_partition.next #=> [[:a,:b,:c], [:d]] # [0,0,0,1]
34
+ set_partition.next #=> [[:a,:b,:d], [:c]] # [0,0,1,0]
35
+
36
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d], 2
37
+ set_partition.start #=> [[:a,:b,:c], [:d]] # [0,0,0,1]
38
+ set_partition.next #=> [[:a,:b,:d], [:c]] # [0,0,1,0]
39
+ set_partition.next #=> [[:a,:b], [:c,:d]] # [0,0,1,1]
40
+
41
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d], 2
42
+ set_partition.to_a
43
+ #=>[
44
+ # [[:a,:b,:c], [:d]],
45
+ # [[:a,:b,:d], [:c]],
46
+ # [[:a,:b], [:c,:d]],
47
+ # [[:a,:c,:d], [:b]],
48
+ # [[:a,:c], [:b,:d]],
49
+ # [[:a,:d], [:b, :c]],
50
+ # [[:a], [:b,:c,:d]]
51
+ # ]
52
+
53
+ ## TODO
54
+ - The Ruby Way
55
+
56
+ ## Contributing
57
+
58
+ 1. Fork it
59
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
60
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
61
+ 4. Push to the branch (`git push origin my-new-feature`)
62
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,8 @@
1
+ require "set_partition/version"
2
+ require "set_partition/generator"
3
+ require "set_partition/fixed_generator"
4
+ require "set_partition/array"
5
+
6
+ module SetPartition
7
+
8
+ end
@@ -0,0 +1,56 @@
1
+ module SetPartition
2
+ class Array
3
+ def initialize array, partition_size=nil
4
+ @array = array
5
+ @generator = if partition_size
6
+ FixedGenerator.new array.size, partition_size
7
+ else
8
+ Generator.new array.size
9
+ end
10
+ end
11
+
12
+ def start
13
+ reify @generator.start
14
+ end
15
+
16
+ def end
17
+ reify @generator.end
18
+ end
19
+
20
+ def next
21
+ reify @generator.next
22
+ end
23
+
24
+ def prev
25
+ reify @generator.prev
26
+ end
27
+
28
+ def partition_size
29
+ @generator.size
30
+ end
31
+
32
+ def to_a
33
+ [reify(@generator.start)].tap do |array|
34
+ while @generator.next
35
+ array.push reify @generator.current
36
+ end
37
+ end
38
+ end
39
+
40
+ def current
41
+ reify @generator.current
42
+ end
43
+
44
+ private
45
+ def reify partition
46
+ return unless partition
47
+
48
+ [].tap do |array|
49
+ partition.each_with_index do |partition_index, i|
50
+ array[partition_index] ||= []
51
+ array[partition_index].push @array[i]
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ module SetPartition
2
+ class FixedGenerator < Generator
3
+ def initialize length, partition
4
+ @partition = partition
5
+ super length
6
+ end
7
+
8
+ private
9
+ def initialize_first
10
+ @first = [0] * (@length - @partition)
11
+
12
+ (@length - @partition).upto(@length - 1) do |i|
13
+ @first[i] = i - (@length - @partition)
14
+ end
15
+ end
16
+
17
+ def initialize_last
18
+ @last = 0.upto(@partition - 1).to_a
19
+
20
+ @partition.upto(@length - 1) do |i|
21
+ @last[i] = @partition - 1
22
+ end
23
+ end
24
+
25
+ def next_partition
26
+ p = partition_length
27
+
28
+ (@length - 1).downto(1) do |i|
29
+ if (@current[i] < p - 1) && @current[i] <= @maximum[i - 1]
30
+ @current[i] = @current[i] + 1
31
+ @maximum[i] = [@maximum[i], @current[i]].max
32
+
33
+ (i + 1).upto(@length - (p - @maximum[i])) do |j|
34
+ @current[j] = 0
35
+ @maximum[j] = @maximum[i]
36
+ end
37
+
38
+ (@length - (p - @maximum[i]) + 1).upto(@length - 1) do |j|
39
+ @current[j] = @maximum[j] = p - (@length - j)
40
+ end
41
+ return
42
+ end
43
+ end
44
+ end
45
+
46
+ def previous_partition
47
+ p = partition_length
48
+
49
+ (@length - 1).downto(1) do |i|
50
+ if @current[i] > 0 && (p - @maximum[i - 1] <= @length - i )
51
+ @current[i] = @current[i] - 1
52
+ @maximum[i] = @maximum[i - 1]
53
+
54
+ (i + 1).upto(i + (p - @maximum[i]) - 1) do |j|
55
+ @current[j] = @maximum[j] = @maximum[i] + j - i
56
+ end
57
+
58
+ (i + (p - @maximum[i])).upto(@length - 1) do |j|
59
+ @current[j] = @maximum[j] = p -1
60
+ end
61
+ return
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,82 @@
1
+ module SetPartition
2
+ class Generator
3
+ attr_reader :current
4
+
5
+ def initialize length
6
+ @length = length
7
+ initialize_first
8
+ initialize_last
9
+ start
10
+ end
11
+
12
+ def start
13
+ @current = @first.dup
14
+ @maximum = @first.dup
15
+ end
16
+ alias :rewind :start
17
+
18
+ def end
19
+ @current = @last.dup
20
+ @maximum = @last.dup
21
+ end
22
+
23
+ def next
24
+ return if @current == @last
25
+ next_partition
26
+ @current
27
+ end
28
+
29
+ def prev
30
+ return if @current == @first
31
+ previous_partition
32
+ @current
33
+ end
34
+ alias :previous :prev
35
+
36
+ def length
37
+ partition_length
38
+ end
39
+
40
+ private
41
+ def initialize_first
42
+ @first = [0] * @length
43
+ end
44
+
45
+ def initialize_last
46
+ @last = 0.upto(@length - 1).to_a
47
+ end
48
+
49
+ def next_partition
50
+ (@length - 1).downto(1) do |i|
51
+ if @current[i] <= @maximum[i - 1]
52
+ @current[i] = @current[i] + 1
53
+ @maximum[i] = [@maximum[i], @current[i]].max
54
+
55
+ (i + 1).upto(@length - 1) do |j|
56
+ @current[j] = @current[0]
57
+ @maximum[j] = @maximum[i]
58
+ end
59
+ return
60
+ end
61
+ end
62
+ end
63
+
64
+ def previous_partition
65
+ (@length - 1).downto(1) do |i|
66
+ if @current[i] > @current[0]
67
+ @current[i] = @current[i] - 1
68
+ @maximum[i] = @maximum[i] - 1
69
+
70
+ (i + 1).upto(@length - 1) do |j|
71
+ @current[j] = @maximum[j] = @maximum[i] + j - i
72
+ end
73
+ return
74
+ end
75
+ end
76
+ end
77
+
78
+ def partition_length
79
+ @maximum[@length - 1] - @maximum[0] + 1
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,3 @@
1
+ module SetPartition
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'set_partition/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "set_partition"
8
+ spec.version = SetPartition::VERSION
9
+ spec.authors = ["Teja Sophista V.R."]
10
+ spec.email = ["tejanium@yahoo.com"]
11
+ spec.description = "Set Partition"
12
+ spec.summary = "Ruby implementation of http://en.wikipedia.org/wiki/Partition_of_a_set based on paper Efficient Generation of Set Partitions by Michael Orlov <orlovm@cs.bgu.ac.il>"
13
+ spec.homepage = "http://github.com/tejanium/set_partition"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ end
@@ -0,0 +1,75 @@
1
+ require 'set_partition'
2
+
3
+ describe SetPartition::Array do
4
+ it "generate all possibility set forward" do
5
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d]
6
+
7
+ set_partition.start.should eql [[:a,:b,:c,:d]] # [0,0,0,0]
8
+ set_partition.next.should eql [[:a,:b,:c], [:d]] # [0,0,0,1]
9
+ set_partition.next.should eql [[:a,:b,:d], [:c]] # [0,0,1,0]
10
+ set_partition.next.should eql [[:a,:b], [:c,:d]] # [0,0,1,1]
11
+ set_partition.next.should eql [[:a,:b], [:c], [:d]] # [0,0,1,2]
12
+ set_partition.next.should eql [[:a,:c,:d], [:b]] # [0,1,0,0]
13
+ set_partition.next.should eql [[:a,:c], [:b,:d]] # [0,1,0,1]
14
+ set_partition.next.should eql [[:a,:c], [:b], [:d]] # [0,1,0,2]
15
+ set_partition.next.should eql [[:a,:d], [:b, :c]] # [0,1,1,0]
16
+ set_partition.next.should eql [[:a], [:b,:c,:d]] # [0,1,1,1]
17
+ set_partition.next.should eql [[:a], [:b,:c], [:d]] # [0,1,1,2]
18
+ set_partition.next.should eql [[:a,:d], [:b], [:c]] # [0,1,2,0]
19
+ set_partition.next.should eql [[:a], [:b,:d], [:c]] # [0,1,2,1]
20
+ set_partition.next.should eql [[:a], [:b], [:c,:d]] # [0,1,2,2]
21
+ set_partition.next.should eql [[:a], [:b], [:c], [:d]] # [0,1,2,3]
22
+
23
+ set_partition.next.should be_nil
24
+ end
25
+
26
+ it "generate all possibility set forward with partition size" do
27
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d], 2
28
+
29
+ set_partition.start.should eql [[:a,:b,:c], [:d]] # [0,0,0,1]
30
+ set_partition.next.should eql [[:a,:b,:d], [:c]] # [0,0,1,0]
31
+ set_partition.next.should eql [[:a,:b], [:c,:d]] # [0,0,1,1]
32
+ set_partition.next.should eql [[:a,:c,:d], [:b]] # [0,1,0,0]
33
+ set_partition.next.should eql [[:a,:c], [:b,:d]] # [0,1,0,1]
34
+ set_partition.next.should eql [[:a,:d], [:b, :c]] # [0,1,1,0]
35
+ set_partition.next.should eql [[:a], [:b,:c,:d]] # [0,1,1,1]
36
+
37
+ set_partition.next.should be_nil
38
+ end
39
+
40
+ it "#to_a" do
41
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d]
42
+
43
+ set_partition.to_a.sort.should eql [
44
+ [[:a,:b,:c,:d]], # [0,0,0,0]
45
+ [[:a,:b,:c], [:d]], # [0,0,0,1]
46
+ [[:a,:b,:d], [:c]], # [0,0,1,0]
47
+ [[:a,:b], [:c,:d]], # [0,0,1,1]
48
+ [[:a,:b], [:c], [:d]], # [0,0,1,2]
49
+ [[:a,:c,:d], [:b]], # [0,1,0,0]
50
+ [[:a,:c], [:b,:d]], # [0,1,0,1]
51
+ [[:a,:c], [:b], [:d]], # [0,1,0,2]
52
+ [[:a,:d], [:b, :c]], # [0,1,1,0]
53
+ [[:a], [:b,:c,:d]], # [0,1,1,1]
54
+ [[:a], [:b,:c], [:d]], # [0,1,1,2]
55
+ [[:a,:d], [:b], [:c]], # [0,1,2,0]
56
+ [[:a], [:b,:d], [:c]], # [0,1,2,1]
57
+ [[:a], [:b], [:c,:d]], # [0,1,2,2]
58
+ [[:a], [:b], [:c], [:d]] # [0,1,2,3]
59
+ ].sort
60
+ end
61
+
62
+ it "#to_a with partition size" do
63
+ set_partition = SetPartition::Array.new [:a, :b, :c, :d], 2
64
+
65
+ set_partition.to_a.sort.should eql [
66
+ [[:a,:b,:c], [:d]], # [0,0,0,1]
67
+ [[:a,:b,:d], [:c]], # [0,0,1,0]
68
+ [[:a,:b], [:c,:d]], # [0,0,1,1]
69
+ [[:a,:c,:d], [:b]], # [0,1,0,0]
70
+ [[:a,:c], [:b,:d]], # [0,1,0,1]
71
+ [[:a,:d], [:b, :c]], # [0,1,1,0]
72
+ [[:a], [:b,:c,:d]] # [0,1,1,1]
73
+ ].sort
74
+ end
75
+ end
@@ -0,0 +1,31 @@
1
+ require 'set_partition'
2
+
3
+ describe SetPartition::FixedGenerator do
4
+ it "generate all possibility set forward" do
5
+ set_partition = SetPartition::FixedGenerator.new 4, 2
6
+
7
+ set_partition.start.should eql [0,0,0,1]
8
+ set_partition.next.should eql [0,0,1,0]
9
+ set_partition.next.should eql [0,0,1,1]
10
+ set_partition.next.should eql [0,1,0,0]
11
+ set_partition.next.should eql [0,1,0,1]
12
+ set_partition.next.should eql [0,1,1,0]
13
+ set_partition.next.should eql [0,1,1,1]
14
+
15
+ set_partition.next.should be_nil
16
+ end
17
+
18
+ it "generate all possibility set backward" do
19
+ set_partition = SetPartition::FixedGenerator.new 4, 2
20
+
21
+ set_partition.end.should eql [0,1,1,1]
22
+ set_partition.prev.should eql [0,1,1,0]
23
+ set_partition.prev.should eql [0,1,0,1]
24
+ set_partition.prev.should eql [0,1,0,0]
25
+ set_partition.prev.should eql [0,0,1,1]
26
+ set_partition.prev.should eql [0,0,1,0]
27
+ set_partition.prev.should eql [0,0,0,1]
28
+
29
+ set_partition.prev.should be_nil
30
+ end
31
+ end
@@ -0,0 +1,47 @@
1
+ require 'set_partition'
2
+
3
+ describe SetPartition::Generator do
4
+ it "generate all possibility set forward" do
5
+ set_partition = SetPartition::Generator.new 4
6
+
7
+ set_partition.start.should eql [0,0,0,0]
8
+ set_partition.next.should eql [0,0,0,1]
9
+ set_partition.next.should eql [0,0,1,0]
10
+ set_partition.next.should eql [0,0,1,1]
11
+ set_partition.next.should eql [0,0,1,2]
12
+ set_partition.next.should eql [0,1,0,0]
13
+ set_partition.next.should eql [0,1,0,1]
14
+ set_partition.next.should eql [0,1,0,2]
15
+ set_partition.next.should eql [0,1,1,0]
16
+ set_partition.next.should eql [0,1,1,1]
17
+ set_partition.next.should eql [0,1,1,2]
18
+ set_partition.next.should eql [0,1,2,0]
19
+ set_partition.next.should eql [0,1,2,1]
20
+ set_partition.next.should eql [0,1,2,2]
21
+ set_partition.next.should eql [0,1,2,3]
22
+
23
+ set_partition.next.should be_nil
24
+ end
25
+
26
+ it "generate all possibility set backward" do
27
+ set_partition = SetPartition::Generator.new 4
28
+
29
+ set_partition.end.should eql [0,1,2,3]
30
+ set_partition.prev.should eql [0,1,2,2]
31
+ set_partition.prev.should eql [0,1,2,1]
32
+ set_partition.prev.should eql [0,1,2,0]
33
+ set_partition.prev.should eql [0,1,1,2]
34
+ set_partition.prev.should eql [0,1,1,1]
35
+ set_partition.prev.should eql [0,1,1,0]
36
+ # set_partition.prev.should eql [0,1,0,2]
37
+ set_partition.prev.should eql [0,1,0,1]
38
+ set_partition.prev.should eql [0,1,0,0]
39
+ set_partition.prev.should eql [0,0,1,2]
40
+ set_partition.prev.should eql [0,0,1,1]
41
+ set_partition.prev.should eql [0,0,1,0]
42
+ set_partition.prev.should eql [0,0,0,1]
43
+ set_partition.prev.should eql [0,0,0,0]
44
+
45
+ set_partition.prev.should be_nil
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: set_partition
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Teja Sophista V.R.
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ prerelease: false
16
+ type: :development
17
+ name: bundler
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: '1.3'
24
+ requirement: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ prerelease: false
32
+ type: :development
33
+ name: rake
34
+ version_requirements: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirement: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ prerelease: false
48
+ type: :development
49
+ name: rspec
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirement: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ description: Set Partition
63
+ email:
64
+ - tejanium@yahoo.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - .gitignore
70
+ - Gemfile
71
+ - LICENSE.txt
72
+ - README.md
73
+ - Rakefile
74
+ - lib/set_partition.rb
75
+ - lib/set_partition/array.rb
76
+ - lib/set_partition/fixed_generator.rb
77
+ - lib/set_partition/generator.rb
78
+ - lib/set_partition/version.rb
79
+ - set_partition.gemspec
80
+ - spec/set_partition/array_spec.rb
81
+ - spec/set_partition/fixed_generator_spec.rb
82
+ - spec/set_partition/generator_spec.rb
83
+ homepage: http://github.com/tejanium/set_partition
84
+ licenses:
85
+ - MIT
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ requirements: []
103
+ rubyforge_project:
104
+ rubygems_version: 1.8.25
105
+ signing_key:
106
+ specification_version: 3
107
+ summary: Ruby implementation of http://en.wikipedia.org/wiki/Partition_of_a_set based
108
+ on paper Efficient Generation of Set Partitions by Michael Orlov <orlovm@cs.bgu.ac.il>
109
+ test_files:
110
+ - spec/set_partition/array_spec.rb
111
+ - spec/set_partition/fixed_generator_spec.rb
112
+ - spec/set_partition/generator_spec.rb