eratostene_sieve 0.0.2.alpha → 0.0.3.alpha

Sign up to get free protection for your applications and to get access to all the features.
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