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.