Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions Problem03Module.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require "prime"

module Problem03Module

def Problem03Module.factorize(input)
primeFactors = []
if Prime.prime?(input) || input == 1
primeFactors[0,0] = input
return primeFactors
else
Integer.each_prime(input-1) do |aPrime|
if input % aPrime == 0
primeFactors[0,0] = aPrime
return primeFactors.concat(factorize(input / aPrime))
end
end
end
end

def Problem03Module.main(args)
begin
inp = args.first.to_i
if inp <= 0
raise "Enter a non-zero positive number"
end
primeFactors = factorize(inp)
printf("Largest prime factor for %d is %d\n", inp, primeFactors.last)
return primeFactors.last
rescue StandardError
printf("Unexpected exception occured finding largest prime factor! ")
printf("Usage: ruby problem03.rb <number>\n")
return nil
end
end
end
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,13 @@
DevPreWork01
============
Usage:

Problem#3 - Largest prime factor
ruby problem03.rb <integer>

Problem#5 - Smallest multiple that is divisible by numbers 1..n
ruby problem05.rb <integer>

Problem#8 - Largest product in a series of X digits
ruby problem08.rb <series_length> <consecutive_digits>

3 changes: 3 additions & 0 deletions problem03.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
require_relative 'Problem03Module'

Problem03Module.main(ARGV)
17 changes: 17 additions & 0 deletions problem03_rspec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
require_relative 'Problem03Module'

describe 'largest prime factor' do
it 'finds 1 as largest prime factor for input of 1' do
expect(Problem03Module.main([1])).to eq(1)
end
it 'finds 2 as largest prime factor for input of 2' do
expect(Problem03Module.main([2])).to eq(2)
end
it 'finds 5 as largest prime factor for input of 100' do
expect(Problem03Module.main([100])).to eq(5)
end
it 'mocks and stubs' do
double('ClassX').class
print instance_double("ClassX", :pages => 250).class.pretty_print_instance_variables
end
end
54 changes: 54 additions & 0 deletions problem05.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require "prime"

def factorize(input)

primeFactors = []

if Prime.prime?(input) || input == 1
primeFactors[0,0] = input
return primeFactors
else
Integer.each_prime(input-1) do |aPrime|
if input % aPrime == 0
primeFactors[0,0] = aPrime
return primeFactors.concat(factorize(input / aPrime))
end
end
end
end

begin
n = ARGV[0].to_i
if n <= 0
raise "Enter a number greater than 0"
end
factors = (1..n).to_a().inject([]) do |facs, num|
facs << factorize(num)
facs
end
all_factors = factors.flatten.uniq
exp_hash = factors.inject({}) do |e_hash, f|
count_hash = all_factors.inject({}) do |c_hash, factor|
c_hash[factor] = f.count(factor)
c_hash
end
count_hash.each_pair do |k, v|
if e_hash.has_key?(k)
e_hash[k] = (e_hash[k] < v) ? v : e_hash[k]
else
e_hash[k] = v
end
end
e_hash
end

multiple = exp_hash.inject(1) do |m, (k,v)|
m = m * (k ** v)
m
end
exp_hash.each_pair { |k,v| printf("%d^%d * ", k, v) }
printf(" = %d\n", multiple);
rescue StandardError
printf("Unexpected exception occured finding smallest multiple that is divisible by numbers 1..n!\n")
printf("Usage: ruby problem05.rb <number>\n")
end
40 changes: 40 additions & 0 deletions problem08.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# generate random series of 1000 digits
begin
series_len = ARGV[0].to_i
digits = ARGV[1].to_i
if series_len <= 0 || digits <= 0 || digits > series_len
raise "Enter a number greater than 0"
end
series = (1..series_len).inject("") do |s, i|
s << (48 + Random.rand(10)).chr
s
end

printf("Randomly generated series of %d digits is [ %s ]\n", series_len, series)

# find the sequence
i = 0
numseq = series.split(//).map { |i| i.to_i }

product_seq = greatest_product_seq = numseq[i...digits]
product = greatest_product = product_seq.inject(:*)

while i < series.length-digits
#printf("%d %d %s %d %d \n", i, i+digits, numseq[i...i+digits], product, greatest_product)
i = i+1

product_seq = numseq[i...i+digits]
product = product_seq.inject(:*)
if product > greatest_product
greatest_product = product
greatest_product_seq = product_seq
end
end

printf("Largest product in the above series of %d consecutive digits is %s\n", digits, greatest_product_seq)

rescue StandardError
printf("Unexpected exception occured finding largest product in X length series of Y consecutive digits\n")
printf("Usage: ruby problem08.rb <series_length> <consecutive_digits_count>\n")

end