Skip to content

Instantly share code, notes, and snippets.

@jhsu
Created June 28, 2010 03:20
Show Gist options
  • Save jhsu/455407 to your computer and use it in GitHub Desktop.
Save jhsu/455407 to your computer and use it in GitHub Desktop.
# 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)
# 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