partitions 0.3.0 → 0.3.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.
- checksums.yaml +5 -5
- data/Gemfile +1 -0
- data/README.md +2 -0
- data/Rakefile +5 -3
- data/lib/partitions/integer_partitions.rb +8 -13
- data/lib/partitions/set_partitions.rb +14 -9
- 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: 2b2d13615b978dbdcbc711adf01990f83987f15fefb772441ecbe187c2d5e104
|
|
4
|
+
data.tar.gz: 5c2c48c62dbd76d6b3542c8e1ddf3c4f5afca44cf5653ed63b18ff53d890ae00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '081a48d5c3de11b2b1d3d624470966b70c2fabebd621459a19c0cb5adbfd96b698f096770d6953e41c8731fcb4dd114f796288a842b7090a74716cd3cfcc412e'
|
|
7
|
+
data.tar.gz: 500e15911d9ac2cf9237bf7613fc07f5342f9270865035a795e411a6b4cc4a7ec84727980566952b1e350a4ebf7b0a73e260951bdaef949a1ce1fad0b2ffcdc5
|
data/Gemfile
CHANGED
data/README.md
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/**/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
|
|
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", "~> 6.0"
|
|
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.3.
|
|
4
|
+
version: 0.3.3
|
|
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: '
|
|
32
|
+
version: '6.0'
|
|
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: '
|
|
39
|
+
version: '6.0'
|
|
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: []
|