Skip to content

Instantly share code, notes, and snippets.

@shostakovich
Created July 7, 2012 09:53
Show Gist options
  • Save shostakovich/3065687 to your computer and use it in GitHub Desktop.
Save shostakovich/3065687 to your computer and use it in GitHub Desktop.
Prime Factors Kata 4th iteration
module PrimeFactorDecomposer
def decompose(number)
return [number] if prime?(number)
primes = []
2.upto(number / 2) do |candidate|
while (number % candidate).zero? do
primes << candidate
number = number / candidate
end
end
primes
end
def prime?(number)
return false if number == 1
(2..Math.sqrt(number)).each do |i|
return false if (number %i).zero?
end
true
end
end
describe PrimeFactorDecomposer do
include PrimeFactorDecomposer
it "returns no prime factors for 1" do
decompose(1).should be_empty
end
it "decomposes 2 into 2" do
decompose(2).should be == [2]
end
it "decomposes 3 into 3" do
decompose(3).should be == [3]
end
it "decomposes 4 into 2,2" do
decompose(4).should be == [2,2]
end
it "decomposes 5 into 5" do
decompose(5).should be == [5]
end
it "decomposes 12 into 2,2,3" do
decompose(12).should be == [2,2,3]
end
end
PrimeFactorDecomposer
returns no prime factors for 1
decomposes 2 into 2
decomposes 3 into 3
decomposes 4 into 2,2
decomposes 5 into 5
decomposes 12 into 2,2,3
Finished in 0.00441 seconds
6 examples, 0 failures
@shostakovich
Copy link
Author

I like better how this reads now. The case that Nikolai discovered https://gist.github.com/3045485/1fc71bf3fd39e0943661e5c50769e5829f6a2ccf is fixed now.

It seems the prime? part is needed in order for this to work.

Also i am not sure if the module approach is the best one. The tests read beautiful at least.. I need a few more iterations to know i guess.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment