combinatorics 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog.md +18 -0
- data/LICENSE.txt +1 -1
- data/README.md +40 -42
- data/Rakefile +4 -4
- data/combinatorics.gemspec +38 -105
- data/gemspec.yml +2 -2
- data/lib/combinatorics/extensions/math.rb +0 -1
- data/lib/combinatorics/generator.rb +5 -9
- data/lib/combinatorics/version.rb +1 -1
- metadata +33 -34
data/ChangeLog.md
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
### 0.4.3 / 2012-05-28
|
2
|
+
|
3
|
+
* Fixed a typo in the gemspec, which incorrectly set
|
4
|
+
`required_rubygems_version` to the same value as `required_ruby_version`.
|
5
|
+
|
6
|
+
### 0.4.2 / 2012-05-27
|
7
|
+
|
8
|
+
* Avoid warnings on JRuby by checking for `::Generator` before
|
9
|
+
`::Enumerator::Generator` in `combinatorics/generator`.
|
10
|
+
* Raise a `NameError` when the `Generator` class cannot be found in
|
11
|
+
`combinatorics/generator`.
|
12
|
+
* Replaced ore-tasks with
|
13
|
+
[rubygems-tasks](https://github.com/postmodern/rubygems-tasks#readme).
|
14
|
+
|
15
|
+
### 0.4.1 / 2011-10-15
|
16
|
+
|
17
|
+
* Fixed a typo in the gemspec.
|
18
|
+
|
1
19
|
### 0.4.0 / 2011-10-15
|
2
20
|
|
3
21
|
* Added {Math.sigma}.
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Combinatorics
|
2
2
|
|
3
|
-
* [Source](
|
4
|
-
* [Issues](
|
3
|
+
* [Source](https://github.com/postmodern/combinatorics)
|
4
|
+
* [Issues](https://github.com/postmodern/combinatorics/issues)
|
5
5
|
* [Documentation](http://rubydoc.info/gems/combinatorics)
|
6
6
|
* [Email](mailto:postmodern.mod3 at gmail.com)
|
7
7
|
|
@@ -58,41 +58,6 @@ Power-set:
|
|
58
58
|
#<Set: {"ab", "cd"}>,
|
59
59
|
#<Set: {"ab", "cd", "ef"}>]
|
60
60
|
|
61
|
-
Find the intersecting sub-range between two ranges:
|
62
|
-
|
63
|
-
(1..50) & (20..100)
|
64
|
-
# => (20..50)
|
65
|
-
|
66
|
-
Enumerate over every sub-range between two ranges:
|
67
|
-
|
68
|
-
(1..5).upto(2..10).to_a
|
69
|
-
# => [1..5, 1..6, 1..7, 1..8, 1..9, 1..10,
|
70
|
-
2..5, 2..6, 2..7, 2..8, 2..9, 2..10]
|
71
|
-
|
72
|
-
List comprehensions:
|
73
|
-
|
74
|
-
require 'combinatorics/list_comprehension'
|
75
|
-
|
76
|
-
[(0..10).step(2),('a'..'c')].comprehension.to_a
|
77
|
-
# => [[0, "a"],
|
78
|
-
[0, "b"],
|
79
|
-
[0, "c"],
|
80
|
-
[2, "a"],
|
81
|
-
[2, "b"],
|
82
|
-
[2, "c"],
|
83
|
-
[4, "a"],
|
84
|
-
[4, "b"],
|
85
|
-
[4, "c"],
|
86
|
-
[6, "a"],
|
87
|
-
[6, "b"],
|
88
|
-
[6, "c"],
|
89
|
-
[8, "a"],
|
90
|
-
[8, "b"],
|
91
|
-
[8, "c"],
|
92
|
-
[10, "a"],
|
93
|
-
[10, "b"],
|
94
|
-
[10, "c"]]
|
95
|
-
|
96
61
|
Cartesian products:
|
97
62
|
|
98
63
|
require 'combinatorics/cartesian_product'
|
@@ -148,21 +113,54 @@ Permutation cardinality:
|
|
148
113
|
|
149
114
|
require 'combinatorics/permutation'
|
150
115
|
|
151
|
-
|
152
|
-
|
153
|
-
Combinatorics::Permute::cardinality(128)
|
116
|
+
Combinatorics::Permute.cardinality(128)
|
154
117
|
# => 8256
|
155
118
|
|
119
|
+
List comprehensions:
|
120
|
+
|
121
|
+
require 'combinatorics/list_comprehension'
|
122
|
+
|
123
|
+
[(0..10).step(2),('a'..'c')].comprehension.to_a
|
124
|
+
# => [[0, "a"],
|
125
|
+
[0, "b"],
|
126
|
+
[0, "c"],
|
127
|
+
[2, "a"],
|
128
|
+
[2, "b"],
|
129
|
+
[2, "c"],
|
130
|
+
[4, "a"],
|
131
|
+
[4, "b"],
|
132
|
+
[4, "c"],
|
133
|
+
[6, "a"],
|
134
|
+
[6, "b"],
|
135
|
+
[6, "c"],
|
136
|
+
[8, "a"],
|
137
|
+
[8, "b"],
|
138
|
+
[8, "c"],
|
139
|
+
[10, "a"],
|
140
|
+
[10, "b"],
|
141
|
+
[10, "c"]]
|
142
|
+
|
143
|
+
Find the intersecting sub-range between two ranges:
|
144
|
+
|
145
|
+
(1..50) & (20..100)
|
146
|
+
# => (20..50)
|
147
|
+
|
148
|
+
Enumerate over every sub-range between two ranges:
|
149
|
+
|
150
|
+
(1..5).upto(2..10).to_a
|
151
|
+
# => [1..5, 1..6, 1..7, 1..8, 1..9, 1..10,
|
152
|
+
2..5, 2..6, 2..7, 2..8, 2..9, 2..10]
|
153
|
+
|
156
154
|
## Requirements
|
157
155
|
|
158
156
|
* [ruby](http://www.ruby-lang.org/) >= 1.8.7
|
159
157
|
|
160
158
|
## Install
|
161
159
|
|
162
|
-
|
160
|
+
$ gem install combinatorics
|
163
161
|
|
164
162
|
## Copyright
|
165
163
|
|
166
|
-
Copyright (c) 2010-
|
164
|
+
Copyright (c) 2010-2012 Hal Brodigan
|
167
165
|
|
168
166
|
See {file:LICENSE.txt} for license information.
|
data/Rakefile
CHANGED
@@ -2,13 +2,13 @@ require 'rubygems'
|
|
2
2
|
require 'rake'
|
3
3
|
|
4
4
|
begin
|
5
|
-
gem '
|
6
|
-
require '
|
5
|
+
gem 'rubygems-tasks', '~> 0.1'
|
6
|
+
require 'rubygems/tasks'
|
7
7
|
|
8
|
-
|
8
|
+
Gem::Tasks.new
|
9
9
|
rescue LoadError => e
|
10
10
|
warn e.message
|
11
|
-
warn "Run `gem install
|
11
|
+
warn "Run `gem install rubygems-tasks` to install 'rubygems/tasks'."
|
12
12
|
end
|
13
13
|
|
14
14
|
begin
|
data/combinatorics.gemspec
CHANGED
@@ -2,126 +2,59 @@
|
|
2
2
|
|
3
3
|
require 'yaml'
|
4
4
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
`git ls-files`.split($/)
|
8
|
-
elsif File.directory?('.hg')
|
9
|
-
`hg manifest`.split($/)
|
10
|
-
elsif File.directory?('.svn')
|
11
|
-
`svn ls -R`.split($/).select { |path| File.file?(path) }
|
12
|
-
else
|
13
|
-
Dir['{**/}{.*,*}'].select { |path| File.file?(path) }
|
14
|
-
end
|
5
|
+
Gem::Specification.new do |gem|
|
6
|
+
gemspec = YAML.load_file('gemspec.yml')
|
15
7
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
when String
|
21
|
-
(files & Dir[paths])
|
22
|
-
end
|
23
|
-
}
|
24
|
-
|
25
|
-
version = {
|
26
|
-
:file => 'lib/combinatorics/version.rb',
|
27
|
-
:constant => 'Combinatorics::VERSION'
|
28
|
-
}
|
29
|
-
|
30
|
-
defaults = {
|
31
|
-
'name' => File.basename(File.dirname(__FILE__)),
|
32
|
-
'files' => files,
|
33
|
-
'executables' => filter_files['bin/*'].map { |path| File.basename(path) },
|
34
|
-
'test_files' => filter_files['{test/{**/}*_test.rb,spec/{**/}*_spec.rb}'],
|
35
|
-
'extra_doc_files' => filter_files['*.{txt,rdoc,md,markdown,tt,textile}'],
|
36
|
-
}
|
37
|
-
|
38
|
-
metadata = defaults.merge(YAML.load_file('gemspec.yml'))
|
39
|
-
|
40
|
-
gemspec.name = metadata.fetch('name',defaults[:name])
|
41
|
-
gemspec.version = if metadata['version']
|
42
|
-
metadata['version']
|
43
|
-
elsif File.file?(version[:file])
|
44
|
-
require File.join('.',version[:file])
|
45
|
-
eval(version[:constant])
|
46
|
-
end
|
47
|
-
|
48
|
-
gemspec.summary = metadata.fetch('summary',metadata['description'])
|
49
|
-
gemspec.description = metadata.fetch('description',metadata['summary'])
|
50
|
-
|
51
|
-
case metadata['license']
|
52
|
-
when Array
|
53
|
-
gemspec.licenses = metadata['license']
|
54
|
-
when String
|
55
|
-
gemspec.license = metadata['license']
|
56
|
-
end
|
57
|
-
|
58
|
-
case metadata['authors']
|
59
|
-
when Array
|
60
|
-
gemspec.authors = metadata['authors']
|
61
|
-
when String
|
62
|
-
gemspec.author = metadata['authors']
|
63
|
-
end
|
8
|
+
gem.name = gemspec.fetch('name')
|
9
|
+
gem.version = gemspec.fetch('version') do
|
10
|
+
lib_dir = File.join(File.dirname(__FILE__),'lib')
|
11
|
+
$LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
|
64
12
|
|
65
|
-
|
66
|
-
|
13
|
+
require 'combinatorics/version'
|
14
|
+
Combinatorics::VERSION
|
15
|
+
end
|
67
16
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
17
|
+
gem.summary = gemspec['summary']
|
18
|
+
gem.description = gemspec['description']
|
19
|
+
gem.licenses = Array(gemspec['license'])
|
20
|
+
gem.authors = Array(gemspec['authors'])
|
21
|
+
gem.email = gemspec['email']
|
22
|
+
gem.homepage = gemspec['homepage']
|
74
23
|
|
75
|
-
|
24
|
+
glob = lambda { |patterns| gem.files & Dir[*patterns] }
|
76
25
|
|
77
|
-
|
78
|
-
|
26
|
+
gem.files = `git ls-files`.split($/)
|
27
|
+
gem.files = glob[gemspec['files']] if gemspec['files']
|
79
28
|
|
80
|
-
|
81
|
-
|
29
|
+
gem.executables = gemspec.fetch('executables') do
|
30
|
+
glob['bin/*'].map { |path| File.basename(path) }
|
82
31
|
end
|
32
|
+
gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
|
83
33
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
gemspec.extra_rdoc_files = metadata['extra_doc_files']
|
88
|
-
end
|
89
|
-
|
90
|
-
gemspec.post_install_message = metadata['post_install_message']
|
91
|
-
gemspec.requirements = metadata['requirements']
|
92
|
-
|
93
|
-
if gemspec.respond_to?(:required_ruby_version=)
|
94
|
-
gemspec.required_ruby_version = metadata['required_ruby_version']
|
95
|
-
end
|
34
|
+
gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
|
35
|
+
gem.test_files = glob[gemspec['test_files'] || '{test/{**/}*_test.rb']
|
36
|
+
gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
|
96
37
|
|
97
|
-
|
98
|
-
|
99
|
-
|
38
|
+
gem.require_paths = Array(gemspec.fetch('require_paths') {
|
39
|
+
%w[ext lib].select { |dir| File.directory?(dir) }
|
40
|
+
})
|
100
41
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
when String
|
106
|
-
versions.split(/,\s*/)
|
107
|
-
end
|
108
|
-
}
|
42
|
+
gem.requirements = gemspec['requirements']
|
43
|
+
gem.required_ruby_version = gemspec['required_ruby_version']
|
44
|
+
gem.required_rubygems_version = gemspec['required_rubygems_version']
|
45
|
+
gem.post_install_message = gemspec['post_install_message']
|
109
46
|
|
110
|
-
|
111
|
-
metadata['dependencies'].each do |name,versions|
|
112
|
-
gemspec.add_dependency(name,parse_versions[versions])
|
113
|
-
end
|
114
|
-
end
|
47
|
+
split = lambda { |string| string.split(/,\s*/) }
|
115
48
|
|
116
|
-
if
|
117
|
-
|
118
|
-
|
49
|
+
if gemspec['dependencies']
|
50
|
+
gemspec['dependencies'].each do |name,versions|
|
51
|
+
gem.add_dependency(name,split[versions])
|
119
52
|
end
|
120
53
|
end
|
121
54
|
|
122
|
-
if
|
123
|
-
|
124
|
-
|
55
|
+
if gemspec['development_dependencies']
|
56
|
+
gemspec['development_dependencies'].each do |name,versions|
|
57
|
+
gem.add_development_dependency(name,split[versions])
|
125
58
|
end
|
126
59
|
end
|
127
60
|
end
|
data/gemspec.yml
CHANGED
@@ -10,12 +10,12 @@ authors:
|
|
10
10
|
email:
|
11
11
|
- postmodern.mod3@gmail.com
|
12
12
|
- super@manson.vistech.net
|
13
|
-
homepage:
|
13
|
+
homepage: https://github.com/postmodern/combinatorics#readme
|
14
14
|
has_yard: true
|
15
15
|
|
16
16
|
required_ruby_version: ">= 1.8.7"
|
17
17
|
|
18
18
|
development_dependencies:
|
19
|
-
|
19
|
+
rubygems-tasks: ~> 0.1
|
20
20
|
rspec: ~> 2.4
|
21
21
|
yard: ~> 0.7
|
@@ -1,17 +1,13 @@
|
|
1
1
|
require 'enumerator'
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'generator' # 1.8.7
|
5
|
-
rescue LoadError
|
6
|
-
end
|
2
|
+
require 'generator' if RUBY_VERSION < '1.9'
|
7
3
|
|
8
4
|
module Combinatorics
|
9
5
|
# auto-detects the `Generator` class.
|
10
|
-
Generator = if defined?(::
|
11
|
-
::Enumerator::Generator
|
12
|
-
elsif defined?(::Generator) # 1.8.7
|
6
|
+
Generator = if defined?(::Generator) # 1.8.7
|
13
7
|
::Generator
|
8
|
+
elsif defined?(::Enumerator::Generator) # 1.9
|
9
|
+
::Enumerator::Generator
|
14
10
|
else
|
15
|
-
raise("unable to find the Generator class")
|
11
|
+
raise(NameError,"unable to find the Generator class")
|
16
12
|
end
|
17
13
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: combinatorics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,22 +10,27 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-05-28 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
17
|
-
requirement:
|
16
|
+
name: rubygems-tasks
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '0.
|
22
|
+
version: '0.1'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0.1'
|
26
31
|
- !ruby/object:Gem::Dependency
|
27
32
|
name: rspec
|
28
|
-
requirement:
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
29
34
|
none: false
|
30
35
|
requirements:
|
31
36
|
- - ~>
|
@@ -33,10 +38,15 @@ dependencies:
|
|
33
38
|
version: '2.4'
|
34
39
|
type: :development
|
35
40
|
prerelease: false
|
36
|
-
version_requirements:
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.4'
|
37
47
|
- !ruby/object:Gem::Dependency
|
38
48
|
name: yard
|
39
|
-
requirement:
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
40
50
|
none: false
|
41
51
|
requirements:
|
42
52
|
- - ~>
|
@@ -44,14 +54,23 @@ dependencies:
|
|
44
54
|
version: '0.7'
|
45
55
|
type: :development
|
46
56
|
prerelease: false
|
47
|
-
version_requirements:
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.7'
|
48
63
|
description: A collection of modules and methods for performing Combinatoric calculations.
|
49
64
|
email:
|
50
65
|
- postmodern.mod3@gmail.com
|
51
66
|
- super@manson.vistech.net
|
52
67
|
executables: []
|
53
68
|
extensions: []
|
54
|
-
extra_rdoc_files:
|
69
|
+
extra_rdoc_files:
|
70
|
+
- Benchmarks.md
|
71
|
+
- ChangeLog.md
|
72
|
+
- LICENSE.txt
|
73
|
+
- README.md
|
55
74
|
files:
|
56
75
|
- .document
|
57
76
|
- .gemtest
|
@@ -135,7 +154,7 @@ files:
|
|
135
154
|
- spec/power_set/mixin_examples.rb
|
136
155
|
- spec/power_set/set_spec.rb
|
137
156
|
- spec/spec_helper.rb
|
138
|
-
homepage:
|
157
|
+
homepage: https://github.com/postmodern/combinatorics#readme
|
139
158
|
licenses:
|
140
159
|
- MIT
|
141
160
|
post_install_message:
|
@@ -156,28 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
175
|
version: '0'
|
157
176
|
requirements: []
|
158
177
|
rubyforge_project:
|
159
|
-
rubygems_version: 1.8.
|
178
|
+
rubygems_version: 1.8.24
|
160
179
|
signing_key:
|
161
180
|
specification_version: 3
|
162
181
|
summary: Bringing (more) Combinatorics to Ruby
|
163
|
-
test_files:
|
164
|
-
- spec/cartesian_product/array_spec.rb
|
165
|
-
- spec/cartesian_product/cardinality_spec.rb
|
166
|
-
- spec/cartesian_product/set_spec.rb
|
167
|
-
- spec/choose/array_spec.rb
|
168
|
-
- spec/choose/cardinality_spec.rb
|
169
|
-
- spec/choose/set_spec.rb
|
170
|
-
- spec/combinatorics_spec.rb
|
171
|
-
- spec/derange/array_spec.rb
|
172
|
-
- spec/derange/cardinality_spec.rb
|
173
|
-
- spec/enumerator_spec.rb
|
174
|
-
- spec/extensions/math_spec.rb
|
175
|
-
- spec/extensions/range_spec.rb
|
176
|
-
- spec/generator_spec.rb
|
177
|
-
- spec/list_comprehension_spec.rb
|
178
|
-
- spec/permute/array_spec.rb
|
179
|
-
- spec/permute/cardinality_spec.rb
|
180
|
-
- spec/permute/set_spec.rb
|
181
|
-
- spec/power_set/array_spec.rb
|
182
|
-
- spec/power_set/cardinality_spec.rb
|
183
|
-
- spec/power_set/set_spec.rb
|
182
|
+
test_files: []
|