-
-
Save jhsu/455407 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
# Project Euler problem #8 | |
# Find the greatest product of five consecutive digits in the 1000-digit number. | |
# This solution sorts each series of 5 digits by larger to lower digits (ie 54321) and and finds | |
# the largest number, since that would mean the series with the most larger numbers, then find the | |
# product of those digits. This is much more efficient than the one below. | |
# -- Joseph Hsu | |
long_number = <<NUMBER | |
73167176531330624919225119674426574742355349194934 | |
96983520312774506326239578318016984801869478851843 | |
85861560789112949495459501737958331952853208805511 | |
12540698747158523863050715693290963295227443043557 | |
66896648950445244523161731856403098711121722383113 | |
62229893423380308135336276614282806444486645238749 | |
30358907296290491560440772390713810515859307960866 | |
70172427121883998797908792274921901699720888093776 | |
65727333001053367881220235421809751254540594752243 | |
52584907711670556013604839586446706324415722155397 | |
53697817977846174064955149290862569321978468622482 | |
83972241375657056057490261407972968652414535100474 | |
82166370484403199890008895243450658541227588666881 | |
16427171479924442928230863465674813919123162824586 | |
17866458359124566529476545682848912883142607690042 | |
24219022671055626321111109370544217506941658960408 | |
07198403850962455444362981230987879927244284909188 | |
84580156166097919133875499200524063689912560717606 | |
05886116467109405077541002256983155200055935729725 | |
71636269561882670428252483600823257530420752963450 | |
NUMBER | |
long_number = long_number.gsub(/\D/, '').to_i | |
split_number = long_number.to_s.split('') | |
largest_series = [0,0,0,0,0] | |
split_number.each_with_index do |digit, index| | |
series = split_number.slice(index, 5) | |
if series.length == 5 | |
series = series.map(&:to_i).sort | |
largest_series = series if series.join.to_i > largest_series.join.to_i | |
end | |
end | |
puts largest_series.inject(1) {|product, n| product * n} | |
# o rvm 1.9.2 benchmark 8.rb | |
# | |
# info: 1.9.2 (ruby-1.9.2-preview3): ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux] | |
# Rehearsal ---------------------------------------- | |
# 8.rb | |
# 0.000000 0.000000 0.000000 ( 0.000004) | |
# ------------------------------- total: 0.000000sec | |
# | |
# user system total real | |
# 8.rb | |
# 0.000000 0.000000 0.000000 ( 0.000002) |
This file contains hidden or 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
# Project Euler problem #8 | |
# Find the greatest product of five consecutive digits in the 1000-digit number. | |
# This solution finds the product of all consecutive digits to determine the largest product | |
# -- Joseph Hsu | |
long_number = <<NUMBER | |
73167176531330624919225119674426574742355349194934 | |
96983520312774506326239578318016984801869478851843 | |
85861560789112949495459501737958331952853208805511 | |
12540698747158523863050715693290963295227443043557 | |
66896648950445244523161731856403098711121722383113 | |
62229893423380308135336276614282806444486645238749 | |
30358907296290491560440772390713810515859307960866 | |
70172427121883998797908792274921901699720888093776 | |
65727333001053367881220235421809751254540594752243 | |
52584907711670556013604839586446706324415722155397 | |
53697817977846174064955149290862569321978468622482 | |
83972241375657056057490261407972968652414535100474 | |
82166370484403199890008895243450658541227588666881 | |
16427171479924442928230863465674813919123162824586 | |
17866458359124566529476545682848912883142607690042 | |
24219022671055626321111109370544217506941658960408 | |
07198403850962455444362981230987879927244284909188 | |
84580156166097919133875499200524063689912560717606 | |
05886116467109405077541002256983155200055935729725 | |
71636269561882670428252483600823257530420752963450 | |
NUMBER | |
long_number = long_number.gsub(/\D/, '').to_i | |
split_number = long_number.to_s.split('') | |
largest_product = 0 | |
split_number.each_with_index do |digit, index| | |
series = split_number.slice(index, 5).map(&:to_i) | |
if series.length == 5 | |
product = series.inject(1) {|product, n| product * n} | |
largest_product = product if product > largest_product | |
end | |
end | |
puts largest_product | |
# o rvm 1.9.2 benchmark 8_alt.rb | |
# | |
# info: 1.9.2 (ruby-1.9.2-preview3): ruby 1.9.2dev (2010-05-31 revision 28117) [i686-linux] | |
# | |
# Rehearsal -------------------------------------------- | |
# 8_alt.rb | |
# 0.010000 0.000000 0.010000 ( 0.003404) | |
# ----------------------------------- total: 0.010000sec | |
# | |
# user system total real | |
# 8_alt.rb | |
# 0.000000 0.000000 0.000000 ( 0.003330) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment