partitions 0.2.0 → 0.3.2
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.
- checksums.yaml +5 -5
- data/Gemfile +1 -0
- data/Rakefile +5 -3
- data/lib/partitions/integer_partitions.rb +8 -13
- data/lib/partitions/set_partitions.rb +32 -11
- data/lib/partitions/version.rb +1 -1
- data/partitions.gemspec +14 -14
- metadata +14 -30
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 19fb19c516c032bc6c91fc86529c16a93045b62b43d30eda767a9626fed3fd8e
|
|
4
|
+
data.tar.gz: 98f11441abd2057afc841677860d40e17679283abcdc4ee41c803ed68b9cc868
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a15123e22ee7969c7b3d168c3befa77d0635fe233a658d8a06c6118582830ae623a344991dc63864fc2473807fddc7b0c7193005fd4dc5488803fcbaffdb4baf
|
|
7
|
+
data.tar.gz: 842718509baa3bf2b69df7ce82a6b636aa7ad9e8d3c26eeeec2319320209e71fe5d5984e19d7ffef53d28981bb26e62b20d030d915ffb0b9cafff944df9eb704
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
|
-
require 'rake/testtask'
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
desc "Run tests"
|
|
4
|
+
task :test do
|
|
5
|
+
files = FileList["test/**/*_test.rb", "test/**/*.rb"].to_a
|
|
6
|
+
raise "No test files found" if files.empty?
|
|
7
|
+
ruby "-Itest", *files
|
|
6
8
|
end
|
|
7
9
|
|
|
8
10
|
task default: :test
|
|
@@ -1,34 +1,29 @@
|
|
|
1
1
|
module Partitions
|
|
2
|
-
|
|
3
2
|
module IntegerPartitions
|
|
4
3
|
def partitions
|
|
5
4
|
n = self
|
|
6
|
-
if n < 0
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
raise ArgumentError, "n should be greater than or equal to 0" if n < 0
|
|
6
|
+
return enum_for(:partitions) unless block_given?
|
|
7
|
+
return yield([]) if n.zero?
|
|
9
8
|
|
|
10
9
|
a = Array.new(n + 1, 0)
|
|
11
10
|
k = 2
|
|
12
11
|
a[1] = 0
|
|
13
12
|
a[2] = n
|
|
13
|
+
|
|
14
14
|
while k != 1 do
|
|
15
15
|
y = a[k] - 1
|
|
16
|
-
k
|
|
16
|
+
k -= 1
|
|
17
17
|
x = a[k] + 1
|
|
18
18
|
|
|
19
19
|
while x <= y do
|
|
20
20
|
a[k] = x
|
|
21
|
-
y
|
|
22
|
-
k
|
|
21
|
+
y -= x
|
|
22
|
+
k += 1
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
a[k] = x + y
|
|
26
|
-
|
|
27
|
-
if block_given?
|
|
28
|
-
yield a.values_at(1..k)
|
|
29
|
-
else
|
|
30
|
-
p a.values_at(1..k)
|
|
31
|
-
end
|
|
26
|
+
yield a.values_at(1..k)
|
|
32
27
|
end
|
|
33
28
|
end
|
|
34
29
|
end
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
module Partitions
|
|
2
2
|
class SetPartitions
|
|
3
|
-
|
|
3
|
+
include Enumerable
|
|
4
|
+
attr_reader :size
|
|
5
|
+
|
|
6
|
+
def initialize(n, p = nil)
|
|
7
|
+
raise ArgumentError, "n must be a non-negative Integer" unless n.is_a?(Integer) && n >= 0
|
|
8
|
+
if !p.nil? && (!p.is_a?(Integer) || p < 1 || p > n)
|
|
9
|
+
raise ArgumentError, "p must be an Integer between 1 and n"
|
|
10
|
+
end
|
|
4
11
|
|
|
5
|
-
def initialize(n, p=nil)
|
|
6
12
|
@n = n
|
|
7
13
|
@k = Array.new(n, 0)
|
|
8
14
|
@m = Array.new(n, 0)
|
|
@@ -96,17 +102,16 @@ module Partitions
|
|
|
96
102
|
end
|
|
97
103
|
|
|
98
104
|
def each_partition
|
|
99
|
-
unless block_given?
|
|
100
|
-
|
|
101
|
-
end
|
|
105
|
+
return enum_for(:each_partition) unless block_given?
|
|
106
|
+
|
|
102
107
|
reinitialize
|
|
103
108
|
yield @k.clone
|
|
104
109
|
(count - 1).times do
|
|
105
|
-
|
|
106
|
-
yield partition
|
|
110
|
+
yield next_partition
|
|
107
111
|
end
|
|
108
112
|
reinitialize
|
|
109
113
|
end
|
|
114
|
+
alias each each_partition
|
|
110
115
|
|
|
111
116
|
def count
|
|
112
117
|
if @p.nil?
|
|
@@ -114,9 +119,9 @@ module Partitions
|
|
|
114
119
|
(1..n).each do |k|
|
|
115
120
|
sum += sterling_second(@n, k)
|
|
116
121
|
end
|
|
117
|
-
|
|
122
|
+
sum
|
|
118
123
|
else
|
|
119
|
-
|
|
124
|
+
sterling_second(@n, @p)
|
|
120
125
|
end
|
|
121
126
|
end
|
|
122
127
|
|
|
@@ -124,12 +129,28 @@ module Partitions
|
|
|
124
129
|
|
|
125
130
|
attr_accessor :k, :m, :n
|
|
126
131
|
attr_writer :size
|
|
132
|
+
@@cache = {}
|
|
133
|
+
|
|
134
|
+
def populate_cache(n, k, val)
|
|
135
|
+
if @@cache[n]
|
|
136
|
+
@@cache[n][k] = val
|
|
137
|
+
else
|
|
138
|
+
@@cache[n] = {k => val}
|
|
139
|
+
end
|
|
140
|
+
end
|
|
127
141
|
|
|
128
142
|
def sterling_second(n, k)
|
|
143
|
+
if @@cache[n] && @@cache[n][k]
|
|
144
|
+
return @@cache[n][k]
|
|
145
|
+
end
|
|
146
|
+
|
|
129
147
|
if k == 1 || k == n
|
|
130
148
|
return 1
|
|
131
149
|
else
|
|
132
|
-
|
|
150
|
+
populate_cache(n - 1, k - 1, sterling_second(n - 1, k - 1))
|
|
151
|
+
populate_cache(n - 1, k, sterling_second(n - 1, k))
|
|
152
|
+
populate_cache(n, k, @@cache[n - 1][k - 1] + k * @@cache[n - 1][k])
|
|
153
|
+
return @@cache[n][k]
|
|
133
154
|
end
|
|
134
155
|
end
|
|
135
156
|
|
|
@@ -162,4 +183,4 @@ module Partitions
|
|
|
162
183
|
end
|
|
163
184
|
|
|
164
185
|
end
|
|
165
|
-
end
|
|
186
|
+
end
|
data/lib/partitions/version.rb
CHANGED
data/partitions.gemspec
CHANGED
|
@@ -9,25 +9,25 @@ Gem::Specification.new do |spec|
|
|
|
9
9
|
spec.authors = ["NagaChaitanya Vellanki"]
|
|
10
10
|
spec.email = ["nagachaitanya.vellanki.com"]
|
|
11
11
|
|
|
12
|
-
spec.summary = %q{
|
|
13
|
-
spec.description = %q{Generate integer, set and multiset partitions}
|
|
12
|
+
spec.summary = %q{A Ruby gem to generate partitions.}
|
|
13
|
+
spec.description = %q{Generate integer, set and multiset partitions.}
|
|
14
14
|
spec.homepage = "https://github.com/chaitanyav/partitions"
|
|
15
|
+
spec.required_ruby_version = ">= 2.7"
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
|
22
|
-
end
|
|
17
|
+
spec.metadata = {
|
|
18
|
+
"allowed_push_host" => "https://rubygems.org",
|
|
19
|
+
"source_code_uri" => spec.homepage,
|
|
20
|
+
"changelog_uri" => "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
21
|
+
}
|
|
23
22
|
|
|
24
|
-
spec.files =
|
|
23
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
24
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
25
|
+
end
|
|
25
26
|
spec.bindir = "exe"
|
|
26
27
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
27
28
|
spec.require_paths = ["lib"]
|
|
28
29
|
|
|
29
|
-
spec.add_development_dependency "
|
|
30
|
-
spec.add_development_dependency "
|
|
31
|
-
spec.add_development_dependency "
|
|
32
|
-
spec.add_development_dependency "simplecov", "~> 0.10"
|
|
30
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
|
31
|
+
spec.add_development_dependency "minitest", "~> 5.26"
|
|
32
|
+
spec.add_development_dependency "simplecov", "~> 0.22"
|
|
33
33
|
end
|
metadata
CHANGED
|
@@ -1,72 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: partitions
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2
|
|
4
|
+
version: 0.3.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- NagaChaitanya Vellanki
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: bundler
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.9'
|
|
20
|
-
type: :development
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.9'
|
|
27
12
|
- !ruby/object:Gem::Dependency
|
|
28
13
|
name: rake
|
|
29
14
|
requirement: !ruby/object:Gem::Requirement
|
|
30
15
|
requirements:
|
|
31
16
|
- - "~>"
|
|
32
17
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
18
|
+
version: '13.0'
|
|
34
19
|
type: :development
|
|
35
20
|
prerelease: false
|
|
36
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
22
|
requirements:
|
|
38
23
|
- - "~>"
|
|
39
24
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
25
|
+
version: '13.0'
|
|
41
26
|
- !ruby/object:Gem::Dependency
|
|
42
27
|
name: minitest
|
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
|
44
29
|
requirements:
|
|
45
30
|
- - "~>"
|
|
46
31
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '5.
|
|
32
|
+
version: '5.26'
|
|
48
33
|
type: :development
|
|
49
34
|
prerelease: false
|
|
50
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
36
|
requirements:
|
|
52
37
|
- - "~>"
|
|
53
38
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '5.
|
|
39
|
+
version: '5.26'
|
|
55
40
|
- !ruby/object:Gem::Dependency
|
|
56
41
|
name: simplecov
|
|
57
42
|
requirement: !ruby/object:Gem::Requirement
|
|
58
43
|
requirements:
|
|
59
44
|
- - "~>"
|
|
60
45
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '0.
|
|
46
|
+
version: '0.22'
|
|
62
47
|
type: :development
|
|
63
48
|
prerelease: false
|
|
64
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
50
|
requirements:
|
|
66
51
|
- - "~>"
|
|
67
52
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '0.
|
|
69
|
-
description: Generate integer, set and multiset partitions
|
|
53
|
+
version: '0.22'
|
|
54
|
+
description: Generate integer, set and multiset partitions.
|
|
70
55
|
email:
|
|
71
56
|
- nagachaitanya.vellanki.com
|
|
72
57
|
executables: []
|
|
@@ -92,7 +77,8 @@ homepage: https://github.com/chaitanyav/partitions
|
|
|
92
77
|
licenses: []
|
|
93
78
|
metadata:
|
|
94
79
|
allowed_push_host: https://rubygems.org
|
|
95
|
-
|
|
80
|
+
source_code_uri: https://github.com/chaitanyav/partitions
|
|
81
|
+
changelog_uri: https://github.com/chaitanyav/partitions/blob/main/CHANGELOG.md
|
|
96
82
|
rdoc_options: []
|
|
97
83
|
require_paths:
|
|
98
84
|
- lib
|
|
@@ -100,16 +86,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
100
86
|
requirements:
|
|
101
87
|
- - ">="
|
|
102
88
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '
|
|
89
|
+
version: '2.7'
|
|
104
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
91
|
requirements:
|
|
106
92
|
- - ">="
|
|
107
93
|
- !ruby/object:Gem::Version
|
|
108
94
|
version: '0'
|
|
109
95
|
requirements: []
|
|
110
|
-
|
|
111
|
-
rubygems_version: 2.4.5
|
|
112
|
-
signing_key:
|
|
96
|
+
rubygems_version: 4.0.13
|
|
113
97
|
specification_version: 4
|
|
114
|
-
summary:
|
|
98
|
+
summary: A Ruby gem to generate partitions.
|
|
115
99
|
test_files: []
|