Oompa-euler 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,10 @@
1
+ === 1.0.3 / 2008-08-26
2
+ * Now added Rakefile for easy development.
3
+ * Restructured gemspec
4
+ * Added unit tests to gemspec
5
+
6
+ === 1.0.2 / 2008-08-25
7
+ * Removed redundant files…
8
+
9
+ === 1.0.0 / 2008-08-25
10
+ * Initial Release!
data/Manifest.txt ADDED
@@ -0,0 +1,8 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/euler.rb
6
+ test/test_euler.rb
7
+ test/tc_integer_methods.rb
8
+ test/tc_module.rb
@@ -1,3 +1,33 @@
1
+ = euler
2
+
3
+ == DESCRIPTION:
4
+
5
+ libeuler is a simple library you can include in your code to take away some of the boring repetitive parts of solving Project Euler problems.
6
+
7
+ == FEATURES:
8
+
9
+ * Adds various methods to the Integer class, such as factorial, prime?, is_fibonacci?, etc.
10
+ * Provides various module methods, such as generate_sieve, get_primes, etc.
11
+
12
+ == SYNOPSIS:
13
+
14
+ require 'rubygems'
15
+ require 'euler'
16
+
17
+ 5.factorial # => 120
18
+
19
+ == REQUIREMENTS:
20
+
21
+ * none
22
+
23
+ == INSTALL:
24
+
25
+ * sudo gem install euler
26
+
27
+ == LICENSE:
28
+
29
+ (BSD License)
30
+
1
31
  Copyright (c) 2008, Mike "Oompa" Skalnik ("THE AUTHOR")
2
32
  All rights reserved. mike.skalnik@gmail.com
3
33
 
@@ -22,3 +52,4 @@ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22
52
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23
53
  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24
54
  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
55
+
data/lib/euler.rb CHANGED
@@ -1,13 +1,6 @@
1
- =begin rdoc
2
- libeuler is a simple library you can simply +require+ in your code.
3
- It's goal is to help reduce the repetativeness of some Project
4
- Euler problems.
5
-
6
- Author:: Mike Skalnik(mailto:mike.skalnik@gmail.com)
7
- Copyright:: 2008, Mike Skalnik; All Rights Reserved
8
- License:: See LICENSE file
9
- =end
1
+ # The module that contains all the methods.
10
2
  module Euler
3
+ VERSION = "1.0.3"
11
4
  extend self
12
5
  attr_reader :primes, :sieve, :fibonaccis
13
6
  # Several methods for the Integer class.
@@ -25,10 +18,10 @@ module Euler
25
18
  def prime_factors
26
19
  return [self] if self.prime?
27
20
  current, to_factor, factors, max = 2, self, [], 0
28
- # current is the value currently being tested
29
- # to_factor is the value being factored (slowly moves to a prime value)
30
- # factors is the array of prime factors
31
- # max is the maximum value of any factor set after the next loop
21
+ # current is the value currently being tested to_factor is the value
22
+ # being factored (slowly moves to a prime value) factors is the array of
23
+ # prime factors max is the maximum value of any factor set after the
24
+ # next loop
32
25
  while to_factor % current == 0
33
26
  factors << 2
34
27
  to_factor /= current
@@ -47,8 +40,7 @@ module Euler
47
40
  return factors
48
41
  end
49
42
 
50
- # Returns +true+ or +false+ depending on the primality of
51
- # +self+
43
+ # Returns a boolean which gives the primality of +self+
52
44
  # 2.prime? # => true
53
45
  # 4.prime? # => false
54
46
  def prime?
@@ -65,9 +57,8 @@ module Euler
65
57
  return true
66
58
  end
67
59
 
68
- # Compares +self+ and +x+ and returns +true+
69
- # if the values are permutations, and +false+
70
- # otherwise.
60
+ # Compares +self+ and +x+ and returns +true+ if the values are
61
+ # permutations, and +false+ otherwise.
71
62
  # 123.is_permutation?(312) # => true
72
63
  # 312.is_permutation?(281) # => false
73
64
  def is_permutation?(x)
@@ -88,8 +79,7 @@ module Euler
88
79
  return s_total == x_total
89
80
  end
90
81
 
91
- # Checks to see if +self+ is a pandigital with the range
92
- # of x
82
+ # Checks to see if +self+ is a pandigital with the range of x
93
83
  # 0192837465.is_pandigital?(0..9) # => true
94
84
  # 0192837465.is_pandigital?(1..9) # => false
95
85
  def is_pandigital?(x)
@@ -100,8 +90,7 @@ module Euler
100
90
  return true
101
91
  end
102
92
 
103
- # Checks to see if +self+ is contained in the fibonacci
104
- # sequence.
93
+ # Checks to see if +self+ is contained in the fibonacci sequence.
105
94
  # 1.is_fibonacci? # => true
106
95
  # 4.is_fibonacci? # => true
107
96
  def is_fibonacci?
@@ -123,9 +112,8 @@ module Euler
123
112
  end
124
113
  end
125
114
 
126
- # A basic prime sieve. Sets Euler.sieve to an array of
127
- # boolean values that indicate if that index if prime
128
- # or not.
115
+ # A basic prime sieve. Sets Euler.sieve to an array of boolean values that
116
+ # indicate if that index if prime or not.
129
117
  # Euler.generate_sieve(50)
130
118
  # Euler::sieve[2] # => true
131
119
  # Euler::sieve[4] # => false
@@ -140,8 +128,7 @@ module Euler
140
128
  }
141
129
  end
142
130
 
143
- # A more advanced prime sieve. Generates an n amount of
144
- # prime values.
131
+ # A more advanced prime sieve. Generates an n amount of prime values.
145
132
  # Euler.get_primes(50)
146
133
  # Euler::primes[0] # => 2
147
134
  # Euler::primes[2] # => 5
@@ -176,8 +163,8 @@ module Euler
176
163
  a**2 + b**2 == c**2
177
164
  end
178
165
 
179
- # Given two values of a pythagorean triplet, and nil for the missing
180
- # value, it returns the missing value.
166
+ # Given two values of a pythagorean triplet, and nil for the missing value,
167
+ # it returns the missing value.
181
168
  # Euler.find_missing_pyth_value(nil, 4, 5) # => 3
182
169
  def find_missing_pyth_value(a, b, c)
183
170
  return Math.sqrt(c**2 - b**2) if a.nil?
@@ -0,0 +1,44 @@
1
+ require "test/unit"
2
+
3
+ require "euler"
4
+
5
+ class TestIntegerMethods < Test::Unit::TestCase
6
+ def test_factorial
7
+ assert_equal(0, 0.factorial, "0! == 0")
8
+ assert_equal(1, 1.factorial, "1! == 1")
9
+ assert_equal(120, 5.factorial, "5! == 120")
10
+ end
11
+
12
+ def test_prime_factors
13
+ assert_equal([2, 5], 10.prime_factors, "10 factors into 2 and 5.")
14
+ assert_equal([2, 2, 5], 20.prime_factors, "20 factors into 2, 2, and 5.")
15
+ end
16
+
17
+ def test_primality
18
+ assert(!1.prime?, "1 is not a prime.")
19
+ assert(2.prime?, "2 is the first prime.")
20
+ assert(3.prime?, "3 is the second prime.")
21
+ assert(29.prime?, "29 is the tenth prime.")
22
+ assert(!77.prime?, "77 is not a prime.")
23
+ end
24
+
25
+ def test_permutations
26
+ assert(132.is_permutation?(123), "132 is a permutation of 123.")
27
+ assert(!3344.is_permutation?(3444), "3344 is not a permutation of 3444.")
28
+ end
29
+
30
+ def test_pandigitial
31
+ assert(1234567890.is_pandigital?(0..9), "124567890 is a 0 to 9 pandigital.")
32
+ assert(!123456789.is_pandigital?(0..9), "12346789 is not a 0 to 9 pandigital.");
33
+ end
34
+
35
+ def test_fibonacci
36
+ assert(1.is_fibonacci?, "1 is the first & second fibonacci numbers")
37
+ assert(8.is_fibonacci?, "8 is the sixth fibonacci number")
38
+ end
39
+
40
+ def test_length
41
+ assert_equal(2, 10.length, "10 has a length of 2")
42
+ assert_equal(4, 4563.length, "4563 has a length of 4")
43
+ end
44
+ end
data/test/tc_module.rb ADDED
@@ -0,0 +1,40 @@
1
+ require "test/unit"
2
+
3
+ require "euler"
4
+
5
+ class TestModule < Test::Unit::TestCase
6
+ def test_sieve
7
+ Euler.generate_sieve(50)
8
+ assert_equal(50, Euler::sieve.length, "Euler.sieve(50) should make Euler::sieve an array of length 50.")
9
+ assert(!Euler::sieve[0], "O is not prime.")
10
+ assert(!Euler::sieve[1], "1 is not prime.")
11
+ assert(Euler::sieve[2], "2 is the first prime.")
12
+ assert(Euler::sieve[3], "3 is the second prime.")
13
+ assert(Euler::sieve[29], "29 is the tenth prime.")
14
+ assert(!Euler::sieve[50], "50 is not prime.")
15
+ end
16
+
17
+ def test_get_primes
18
+ Euler.get_primes(50)
19
+ assert_equal(50, Euler::primes.length, "Euler.get_primes(50) should make Euler::primes an array of length 50")
20
+ assert_equal(2, Euler::primes[0], "2 is the first prime.")
21
+ assert_equal(29, Euler::primes[9], "29 is the tenth prime.")
22
+ end
23
+
24
+ def test_get_fibonaccis
25
+ Euler.get_fibonaccis(50)
26
+ assert_equal(2, Euler::fibonaccis[2], "2 is the third fibonaccis number.")
27
+ assert_equal(39088169, Euler::fibonaccis[37], "39088169 is the thirty eighth fibonacci number.")
28
+ end
29
+
30
+ def test_pythagorean_triplet
31
+ assert(Euler.is_pythagorean_triplet?(3, 4, 5), "3, 4, 5 is the smallest pythagorean triplet.")
32
+ assert(!Euler.is_pythagorean_triplet?(1, 2, 3), "1, 2, 3 is not a pythagorean triplet.")
33
+ end
34
+
35
+ def test_find_missing_pyth_value
36
+ assert_equal(3, Euler.find_missing_pyth_value(nil, 4, 5))
37
+ assert_equal(4, Euler.find_missing_pyth_value(3, nil, 5))
38
+ assert_equal(5, Euler.find_missing_pyth_value(3, 4, nil))
39
+ end
40
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/ruby
2
+ require 'test/unit/testsuite'
3
+ require 'tc_integer_methods.rb'
4
+ require 'tc_module.rb'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Oompa-euler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Skalnik
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-08-25 00:00:00 -07:00
12
+ date: 2008-08-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -20,14 +20,15 @@ executables: []
20
20
  extensions: []
21
21
 
22
22
  extra_rdoc_files:
23
- - README.mkdn
24
- - LICENSE
23
+ - README.txt
24
+ - History.txt
25
25
  files:
26
- - LICENSE
27
- - README.mkdn
26
+ - README.txt
27
+ - History.txt
28
+ - Manifest.txt
28
29
  - lib/euler.rb
29
30
  has_rdoc: true
30
- homepage: http://theoompa.com
31
+ homepage: http://www.github.com/Oompa/euler
31
32
  post_install_message:
32
33
  rdoc_options: []
33
34
 
@@ -47,10 +48,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
48
  version:
48
49
  requirements: []
49
50
 
50
- rubyforge_project:
51
+ rubyforge_project: euler
51
52
  rubygems_version: 1.2.0
52
53
  signing_key:
53
54
  specification_version: 2
54
- summary: A gem that provides a small library to help in the solving of Project Euler problems.
55
- test_files: []
56
-
55
+ summary: A small library to help solve Projet Euler problems.
56
+ test_files:
57
+ - test/tc_integer_methods.rb
58
+ - test/tc_module.rb
59
+ - test/test_euler.rb
data/README.mkdn DELETED
@@ -1,5 +0,0 @@
1
- Read me
2
- ========
3
-
4
- ## What is libeuler?
5
- libeuler is a simple library you can include in your code to take away some of the boring repetitive parts of solving Project Euler problems.