eratostene_sieve 0.0.2.alpha → 0.0.3.alpha

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6edb9c9553a06662f98c90901bdc323831423427
4
- data.tar.gz: 76139cf48925688f2c9621163cde64ea43e9b221
3
+ metadata.gz: 0968ea56db9e0e5e32a726c2faf90326d9c780d9
4
+ data.tar.gz: bab8a48045c05cb77de647297d3b84f67ba8aee6
5
5
  SHA512:
6
- metadata.gz: bb5f3e4dead3a00a16ff958d159332e392470ff514506da411e69ab2548eec128599d0fcd45b3dfda8461bd74058b9ea00a92961b17eff03dc349a922555b69d
7
- data.tar.gz: 72169fb765deae71d8140b565edc9b6e16fcdbb9947f0e76e0d15cae23f3d6ff690c70c3a8969c7676b8883e08c28dc2353e6555a444209c47c7ecfa669c3e46
6
+ metadata.gz: f5d7e505f928f970759e7671617e2bbd3e4689b57ebc2df879e3e2f638a58c9ee78372f29e425d67e30301b4df5131a2bfe01ae25bfa96ef8b76ab13977eed0b
7
+ data.tar.gz: ee3e9b34b08b2e9f8e0ac4ceb7edb8e27a46ec08534ae7b8f0641835937a10c68ddb5d95822fd67f997b04e354291f2fb3cd2acb8274782f41c4c5231542d323
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## v0.0.3
2
+
3
+ * Renames .prime_serie into .enumerator.
4
+ * Adds .serie class method.
5
+
1
6
  ## v0.0.2
2
7
 
3
8
  * Fixes prime generation.
data/README.md CHANGED
@@ -4,10 +4,17 @@ This gem provides you a set of minimal utility functions to manage prime numbers
4
4
 
5
5
  ## Changelog
6
6
 
7
- - **1.0.0**: initial release. It provides just these class functions:
7
+ - **0.0.3**:
8
+
9
+ - Renames .prime_serie into .enumerator.
10
+ - Adds .serie class method.
11
+
12
+ - **0.0.2**: Fix .prime_serie.
13
+
14
+ - **0.0.1**: initial release. It provides just these class functions:
8
15
 
9
16
  - `nth_prime(n)` : retun the nth prime number.
10
- - `prime_serie` : return an enumerator over the prime serie.
17
+ - `enumerator` : return an enumerator over the prime serie.
11
18
 
12
19
  ## Installation
13
20
 
@@ -34,11 +41,15 @@ Or install it yourself as:
34
41
  # nth_prime(n) example
35
42
  EratosterneSieve.nth_prime(10) # => 29
36
43
 
37
- # prime_serie example
38
- enumerator = EratosteneSieve.prime_serie
44
+ # enumerator example
45
+ enumerator = EratosteneSieve.enumerator
39
46
  serie = []
40
47
  (0..9).each { |i| serie << enumerator.next }
41
- puts serie # => [1, 2, 3, 5, 7, 11, 13, 17, 19, 23]
48
+ puts serie # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
49
+
50
+ # serie example
51
+ serie = EratosteneSieve.serie(:from => 1, :up_to => 10)
52
+ puts serie # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
42
53
 
43
54
  ## Contributing
44
55
 
@@ -1,4 +1,4 @@
1
1
  # Defines lib version constant.
2
2
  module EratosteneSieve
3
- VERSION = '0.0.2.alpha'
3
+ VERSION = '0.0.3.alpha'
4
4
  end
@@ -3,13 +3,13 @@ require 'eratostene_sieve/railtie' if defined? Rails
3
3
 
4
4
  # Utility to get:
5
5
  # - nth_prime(n): the nth prime number.
6
- # - prime_serie: an enumerator on prime number serie.
6
+ # - enumerator: an enumerator on prime number serie.
7
7
  module EratosteneSieve
8
8
  Inf = 1.0 / 0.0
9
9
 
10
10
  def self.nth_prime(index)
11
- return first_primes[index] if index < first_primes.size
12
- counter = first_primes.size - 1
11
+ return first_primes[index - 1] if index <= first_primes.size
12
+ counter = first_primes.size
13
13
  ((first_primes.last + 2)..Inf).step(2) do |candidate|
14
14
  (2..((candidate**0.5).to_i)).each do |m|
15
15
  break if candidate % m == 0
@@ -19,11 +19,11 @@ module EratosteneSieve
19
19
  end
20
20
  end
21
21
 
22
- def self.prime_serie
22
+ def self.enumerator
23
23
  Enumerator.new do |y|
24
- a = 1
25
- b = 2
26
- index = 2
24
+ a = 2
25
+ b = 3
26
+ index = 3
27
27
  loop do
28
28
  y << a
29
29
  a, b = b, nth_prime(index)
@@ -32,9 +32,24 @@ module EratosteneSieve
32
32
  end
33
33
  end
34
34
 
35
+ def self.serie(options = {})
36
+ from = options[:from] || 1
37
+ up_to = options[:up_to] || 10
38
+ fail "from option must be an integer, given #{from}." unless from.is_a?(Integer)
39
+ fail "up_to option must be an integer, given #{up_to}." unless up_to.is_a?(Integer)
40
+ fail "from option must be > 0, given #{from}." if from < 1
41
+ serie = []
42
+ enumerator = EratosteneSieve.enumerator
43
+ lowest_index = from < up_to ? from : up_to
44
+ (lowest_index - 1).times { enumerator.next }
45
+ ((from - up_to).abs + 1).times { serie << enumerator.next }
46
+ serie.reverse! if from > up_to
47
+ serie
48
+ end
49
+
35
50
  private
36
51
 
37
52
  def self.first_primes
38
- @first_primes ||= [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
53
+ @first_primes ||= [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
39
54
  end
40
55
  end
@@ -16,12 +16,46 @@ describe EratosteneSieve do
16
16
  end
17
17
  end
18
18
 
19
- describe '.prime_serie' do
19
+ describe '.enumerator' do
20
20
  it 'should return ' do
21
- enumerator = EratosteneSieve.prime_serie
21
+ enumerator = EratosteneSieve.enumerator
22
22
  serie = []
23
23
  (0..9).each { |i| serie << enumerator.next }
24
- serie.should == [1, 2, 3, 5, 7, 11, 13, 17, 19, 23]
24
+ serie.should == [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
25
+ end
26
+ end
27
+
28
+ describe '.serie' do
29
+ it 'should return the first 10 primes if no argument is given' do
30
+ serie = EratosteneSieve.serie
31
+ serie.should == [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
32
+ end
33
+
34
+ it 'should return the serie of primes from x to y if :from => x, :up_to => y options are given' do
35
+ serie = EratosteneSieve.serie(:from => 5, :up_to => 10)
36
+ serie.should == [11, 13, 17, 19, 23, 29]
37
+ end
38
+
39
+ it 'should fail if :from is not an Integer' do
40
+ lambda{
41
+ EratosteneSieve.serie(:from => 'a', :up_to => 10)
42
+ }.should raise_error
43
+ end
44
+
45
+ it 'should fail if :up_to is not an Integer' do
46
+ lambda{
47
+ EratosteneSieve.serie(:from => 1, :up_to => :error)
48
+ }.should raise_error
49
+ end
50
+
51
+ it 'should fail if :from < 1' do
52
+ lambda{
53
+ EratosteneSieve.serie(:from => 0, :up_to => 10)
54
+ }.should raise_error
55
+ end
56
+
57
+ it 'should give a reversed array of the serie if :from > :up_to' do
58
+ EratosteneSieve.serie(:from => 10, :up_to => 1).should == EratosteneSieve.serie(:from => 1, :up_to => 10).reverse
25
59
  end
26
60
  end
27
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eratostene_sieve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2.alpha
4
+ version: 0.0.3.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Salicetti