briandoll-greatest_common_factor 0.0.1 → 0.0.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.
@@ -1,3 +1,9 @@
1
1
  == 0.0.1 / 2008-09-19
2
-
3
2
  * Initial release
3
+
4
+ == 0.0.2 / 2008-10.10
5
+ * Added speed improvements when dealing with arrays containing a large
6
+ spread of numbers
7
+ * Added benchmarking code to compare 2-digit array calculation with
8
+ basic ruby
9
+ * Added fuzzy gcf calculations
data/README.txt CHANGED
@@ -10,11 +10,15 @@ This gem provides that same ability on arrays of integers.
10
10
  == FEATURES:
11
11
  * Calculate the GCF on an array of integers
12
12
  * Factor the array of integers by the GCF
13
+ * Calculate non-exact GCF with a specified tolerance
13
14
 
14
15
  == SYNOPSIS:
15
16
  * [12,16,8,40].greatest_common_factor => 4
16
17
  * [12,16,8,40].gcf => 4
17
18
  * [12,16,8,40].factored_by_gcf => [3, 4, 2, 10]
19
+ * Fuzzy:
20
+ * [28,38,73,93].factored_by_gcf => nil
21
+ * [28,38,73,93].factored_by_gcf(1) => [14, 19, 36, 46]
18
22
 
19
23
  == REQUIREMENTS:
20
24
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "greatest_common_factor"
3
- s.version = "0.0.1"
3
+ s.version = "0.0.2"
4
4
  s.date = "2008-09-19"
5
5
  s.summary = "Find the greatest common factor between sets of numbers. Can also factor the array by the gcf."
6
6
  s.email = "brian@emphaticsolutions.com"
@@ -2,8 +2,8 @@ module BrianDoll
2
2
  module GreatestCommonFactor
3
3
 
4
4
  # Factor this all-integer array by the GCF and return the result
5
- def factored_by_gcf
6
- gcf = greatest_common_factor
5
+ def factored_by_gcf(tolerance=0)
6
+ gcf = greatest_common_factor(tolerance)
7
7
  unless gcf.nil?
8
8
  self.collect { |e| e / gcf }
9
9
  else
@@ -12,12 +12,12 @@ module BrianDoll
12
12
  end
13
13
 
14
14
  # Determine the GCF across each element of this all-integer array
15
- def greatest_common_factor
15
+ def greatest_common_factor(tolerance=0)
16
16
  gcf = nil
17
17
  if all_ints? self
18
18
  dupe_self = self.dup
19
19
  dupe_self.delete(0)
20
- factor_sets = find_factor_sets(dupe_self)
20
+ factor_sets = find_factor_sets(dupe_self, tolerance)
21
21
  ampersand_sets = ""
22
22
  factor_sets.each_with_index do |set,i|
23
23
  if i == 0
@@ -49,17 +49,18 @@ module BrianDoll
49
49
  private
50
50
 
51
51
  # Find all factors for each element in the array
52
- def find_factor_sets(collection)
53
- collection.collect { |n| find_all_factors(n) }
52
+ def find_factor_sets(collection,tolerance)
53
+ smallest_number = collection.sort.first
54
+ collection.collect { |n| find_all_factors(n,smallest_number,tolerance) }
54
55
  end
55
56
 
56
57
  # Brute force approach to finding all factors for an integer
57
- def find_all_factors(n)
58
+ def find_all_factors(n,starting_with=n,tolerance=0)
58
59
  n = n.to_i
59
- factor = n - 1
60
+ factor = (n.eql? starting_with) ? (n - 1) : starting_with
60
61
  factors = []
61
- while factor > 1
62
- if ((n % factor) == 0)
62
+ while factor > 1
63
+ if ((n % factor) <= tolerance)
63
64
  factors << factor
64
65
  end
65
66
  factor -= 1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: briandoll-greatest_common_factor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brain Doll