Now, onto Problem 4.

A palindromic number reads the same both ways. The largest palindrome

made from the product of two 2-digit numbers is 9009 = 91 × 99.

Find the largest palindrome made from the product of two 3-digit numbers.

First the tests:

require 'problem4/problem4'

describe "largest palindrome" do

it "finds the largest palindrome of 2 digit numbers" do

expect(Problem4.answer(10...100)).to eq 9009

end

it "finds the largest palendrome of 3 digit numbers" do

expect(Problem4.answer(100...1000)).to eq 906609

end

end

Now for the solution code:

module Problem4

def self.answer(largest_palindrome_range)

max = 0

(largest_palindrome_range).each do |a|

(a...largest_palindrome_range.end).each do |b|

product = a*b

max = [max, product].max if product.to_s == product.to_s.reverse

end

end

return max

end

puts Problem4.answer(100...1000)

end

So, first, I thought about a palindrome. A palindrome is the reverse of itself. So, I took the range we were testing and took each number to get a and then did the same from a to the end of the range to get b. Then I multiplied all of the resulting 2 number possibilities. Finally, in order to find the maximum, you take the product, convert it to a string and then see if it equals the reverse of the string.

This one was really tough for me. I knew about how to find the max and I knew how to check if it was a palindrome and reversing the string, but the middle section of finding the products via the range given was pretty challenging for me to wrap my head around.

comments powered by Disqus