Created
September 26, 2015 19:20
-
-
Save Archer70/0a4b71840e2cf5f44a97 to your computer and use it in GitHub Desktop.
PrimeFactors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class PrimeFactors | |
def self.of number | |
PrimeFactors.new(number).calculate | |
end | |
def initialize number | |
@number = number | |
@divisor = 2 | |
@primes = [] | |
end | |
def calculate | |
return [@number] if @number <= 3 | |
while @number > 1 | |
add_prime | |
end | |
@primes | |
end | |
private | |
def add_prime | |
while @divisor <= @number do | |
if evenly_divisible? | |
divide_number | |
push_prime_to_result | |
else | |
increment_divisor | |
end | |
end | |
end | |
def evenly_divisible? | |
@number % @divisor == 0 | |
end | |
def divide_number | |
@number = @number / @divisor | |
end | |
def push_prime_to_result | |
@primes << @divisor | |
end | |
def increment_divisor | |
@divisor += 1 | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative '../src/prime_factors' | |
RSpec.describe PrimeFactors do | |
describe 'PrimeFactors::of()' do | |
it 'returns 1, given 1' do | |
expect(PrimeFactors::of(1)).to eq([1]) | |
end | |
it 'returns [2], given 2' do | |
expect(PrimeFactors::of(2)).to eq([2]) | |
end | |
it 'returns [3], given 3' do | |
expect(PrimeFactors::of(3)).to eq([3]) | |
end | |
it 'returns [2, 2], given 4' do | |
expect(PrimeFactors::of(4)).to eq([2, 2]) | |
end | |
it 'returns [5], given 5' do | |
expect(PrimeFactors::of(5)).to eq([5]) | |
end | |
it 'retrurn [2, 3], given 6' do | |
expect(PrimeFactors::of(6)).to eq([2, 3]) | |
end | |
it 'returns [7], given 7' do | |
expect(PrimeFactors::of(7)).to eq([7]) | |
end | |
it 'returns [2, 2, 2], given 8' do | |
expect(PrimeFactors::of(8)).to eq([2, 2, 2]) | |
end | |
it 'returns [3, 3], given 9' do | |
expect(PrimeFactors::of(9)).to eq([3, 3]) | |
end | |
it 'returns [2, 3, 5, 7], given 2 x 3 x 5 x 7' do | |
expect(PrimeFactors::of(2*3*5*7)).to eq([2, 3, 5, 7]) | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment