From 15626bb219dcd6363281cfc7da97e55db6abb855 Mon Sep 17 00:00:00 2001 From: Cindy Date: Wed, 19 Feb 2014 22:04:26 -0500 Subject: [PATCH 01/11] Completed Problem 3 --- problem03.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/problem03.rb b/problem03.rb index e69de29..b0d1c87 100644 --- a/problem03.rb +++ b/problem03.rb @@ -0,0 +1,11 @@ +def largest_prime_factor(number) + for i in (2...number) + if number % i == 0 + lpf = number/i + return largest_prime_factor(lpf) + end + end + return number +end + +puts "Largest Prime Factor: #{largest_prime_factor(600851475143)}" \ No newline at end of file From c05d5d3b4f72668382aef0293c1b7213e3637101 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 19:31:02 -0500 Subject: [PATCH 02/11] Adding get_prime_factors method for Problem 5 --- problem05.rb | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/problem05.rb b/problem05.rb index e69de29..836e31d 100644 --- a/problem05.rb +++ b/problem05.rb @@ -0,0 +1,15 @@ +def get_prime_factors(number) + primes = [] + for i in (2...number) + if number % i ==0 + while number % i == 0 + number = number / i + primes << i + end + end + end + primes = [1, number] if primes.empty? + return primes +end + +puts get_prime_factors(20) \ No newline at end of file From c89e8849f0af70dbce8f262331c05284b6b533b0 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 19:44:54 -0500 Subject: [PATCH 03/11] Completing Problem 8, needs cleanup --- problem08.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/problem08.rb b/problem08.rb index e69de29..8be4996 100644 --- a/problem08.rb +++ b/problem08.rb @@ -0,0 +1,20 @@ +my_number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 +chunk_size = 5 + +puts my_number.size +my_number = my_number.to_s +startIndex = 0 +max_product = 0 +while (startIndex < my_number.size) + chunk = my_number[startIndex, chunk_size] + startIndex += chunk_size + total = 1 + chunk.split("").each do |n| + total *= n.to_i + end + puts total + if total > max_product + max_product = total + end +end +puts max_product \ No newline at end of file From c112b88fd4d0f027ff433b703e49a36b12d5f41e Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 19:51:51 -0500 Subject: [PATCH 04/11] Fix startIndex to increment by 1 instead of 5 --- problem08.rb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/problem08.rb b/problem08.rb index 8be4996..81b8bd2 100644 --- a/problem08.rb +++ b/problem08.rb @@ -1,18 +1,17 @@ my_number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 chunk_size = 5 -puts my_number.size my_number = my_number.to_s startIndex = 0 max_product = 0 while (startIndex < my_number.size) chunk = my_number[startIndex, chunk_size] - startIndex += chunk_size + startIndex += 1 total = 1 + chunk.split("").each do |n| total *= n.to_i end - puts total if total > max_product max_product = total end From 19cf295a39defd8b2bf60b3ece4fd5c4c9346d75 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 20:35:02 -0500 Subject: [PATCH 05/11] Completing Problem 5, needs refactoring --- problem05.rb | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/problem05.rb b/problem05.rb index 836e31d..711f8e0 100644 --- a/problem05.rb +++ b/problem05.rb @@ -12,4 +12,23 @@ def get_prime_factors(number) return primes end -puts get_prime_factors(20) \ No newline at end of file +prime_factors_arrays = Array.new +for i in (1..20) + prime_factors_arrays << get_prime_factors(i) +end + +factors_to_frequency = Hash.new +factors_to_frequency[1] = 2 +for prime_factors_array in prime_factors_arrays + for number in prime_factors_array + factors_to_frequency[number] ||= prime_factors_array.count(number) + factors_to_frequency[number] = prime_factors_array.count(number) if prime_factors_array.count(number) > factors_to_frequency[number] + end +end + +total = 1 +factors_to_frequency.each do |key, value| + total = total * key ** value +end + +puts total \ No newline at end of file From 1eabd3a539a1262857c2c5ff300e0cc3eaf1c456 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 20:47:04 -0500 Subject: [PATCH 06/11] Refactoring Problem 5 --- problem05.rb | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/problem05.rb b/problem05.rb index 711f8e0..39db274 100644 --- a/problem05.rb +++ b/problem05.rb @@ -12,23 +12,23 @@ def get_prime_factors(number) return primes end -prime_factors_arrays = Array.new -for i in (1..20) - prime_factors_arrays << get_prime_factors(i) -end +def least_common_multiple(number) + prime_factors_arrays = Array.new + factors_to_frequency = Hash.new + for i in (1..number) + prime_factors = get_prime_factors(i) + for number in prime_factors + factors_to_frequency[number] ||= prime_factors.count(number) + factors_to_frequency[number] = prime_factors.count(number) if prime_factors.count(number) > factors_to_frequency[number] + end + end -factors_to_frequency = Hash.new -factors_to_frequency[1] = 2 -for prime_factors_array in prime_factors_arrays - for number in prime_factors_array - factors_to_frequency[number] ||= prime_factors_array.count(number) - factors_to_frequency[number] = prime_factors_array.count(number) if prime_factors_array.count(number) > factors_to_frequency[number] + total = 1 + factors_to_frequency.each do |key, value| + total = total * key ** value end -end -total = 1 -factors_to_frequency.each do |key, value| - total = total * key ** value + return total end -puts total \ No newline at end of file +puts least_common_multiple(20) \ No newline at end of file From 65bbc372453df514f397bfd76eb96b28647efe44 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 22:02:17 -0500 Subject: [PATCH 07/11] Cleanup --- problem03.rb | 2 ++ problem05.rb | 3 ++- problem08.rb | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/problem03.rb b/problem03.rb index b0d1c87..9631d56 100644 --- a/problem03.rb +++ b/problem03.rb @@ -1,3 +1,5 @@ +# Project Euler: What is the largest prime factor of the number 600851475143? + def largest_prime_factor(number) for i in (2...number) if number % i == 0 diff --git a/problem05.rb b/problem05.rb index 39db274..6a91e85 100644 --- a/problem05.rb +++ b/problem05.rb @@ -1,3 +1,4 @@ +# Project Euler: What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? def get_prime_factors(number) primes = [] for i in (2...number) @@ -31,4 +32,4 @@ def least_common_multiple(number) return total end -puts least_common_multiple(20) \ No newline at end of file +puts "Least Common Multiple: #{least_common_multiple(20)}" \ No newline at end of file diff --git a/problem08.rb b/problem08.rb index 81b8bd2..36cff83 100644 --- a/problem08.rb +++ b/problem08.rb @@ -1,3 +1,4 @@ +# Project Euler: Find the greatest product of five consecutive digits in the 1000-digit number. my_number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 chunk_size = 5 @@ -16,4 +17,4 @@ max_product = total end end -puts max_product \ No newline at end of file +puts "Max Product: #{max_product}" \ No newline at end of file From dca464828749642159283ffd29f9e786eddb9831 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 22:03:50 -0500 Subject: [PATCH 08/11] Cleanup --- problem05.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/problem05.rb b/problem05.rb index 6a91e85..52df21e 100644 --- a/problem05.rb +++ b/problem05.rb @@ -14,7 +14,6 @@ def get_prime_factors(number) end def least_common_multiple(number) - prime_factors_arrays = Array.new factors_to_frequency = Hash.new for i in (1..number) prime_factors = get_prime_factors(i) From 262c18f6c7ca236b4f6ee3f3a7cea75c2891a8a7 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 22:17:41 -0500 Subject: [PATCH 09/11] Cleanup --- problem08.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/problem08.rb b/problem08.rb index 36cff83..d38e426 100644 --- a/problem08.rb +++ b/problem08.rb @@ -3,11 +3,11 @@ chunk_size = 5 my_number = my_number.to_s -startIndex = 0 +start_index = 0 max_product = 0 -while (startIndex < my_number.size) - chunk = my_number[startIndex, chunk_size] - startIndex += 1 +while (start_index < my_number.size) + chunk = my_number[start_index, chunk_size] + start_index += 1 total = 1 chunk.split("").each do |n| From 16bab98ac174dc8105073e72d8afc12547fd99e8 Mon Sep 17 00:00:00 2001 From: Cindy Date: Thu, 20 Feb 2014 22:41:21 -0500 Subject: [PATCH 10/11] Minor refactoring --- problem03.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/problem03.rb b/problem03.rb index 9631d56..cd7ced5 100644 --- a/problem03.rb +++ b/problem03.rb @@ -3,8 +3,8 @@ def largest_prime_factor(number) for i in (2...number) if number % i == 0 - lpf = number/i - return largest_prime_factor(lpf) + factor = number/i + return largest_prime_factor(factor) end end return number From 2774fbba263e9d50ce3b3c2ed140455f6eee2417 Mon Sep 17 00:00:00 2001 From: Cindy Date: Mon, 24 Feb 2014 21:35:33 -0500 Subject: [PATCH 11/11] Refactoring - Replaced each method with inject --- problem08.rb | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/problem08.rb b/problem08.rb index d38e426..f9c63c8 100644 --- a/problem08.rb +++ b/problem08.rb @@ -1,4 +1,5 @@ # Project Euler: Find the greatest product of five consecutive digits in the 1000-digit number. + my_number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450 chunk_size = 5 @@ -8,13 +9,10 @@ while (start_index < my_number.size) chunk = my_number[start_index, chunk_size] start_index += 1 - total = 1 - chunk.split("").each do |n| - total *= n.to_i - end - if total > max_product - max_product = total - end + product = chunk.split("").inject(1) { |total, n| total * n.to_i } + + max_product = product if product > max_product end + puts "Max Product: #{max_product}" \ No newline at end of file