Here's my Ruby solution. There's probably a much more clever way to do this. Probably a more Ruby way to do it for that matter.

# Find the largest palindrome number that is the product of two three digit factors.defcheck_equality(num)num.to_s==num.to_s.reverseenddeffind_palindromer1=(999..1)r2=r1(r1.first).downto(r1.last).eachdo|i|(r2.first).downto(r2.last).eachdo|j|ifcheck_equality(i*j)puts"#{i} * #{j} = #{i*j}"returnendendendendfind_palindrome

If I understand it correctly (correct me if I'm wrong, I don't know Ruby), this doesn't work in general, as it prints the first palindrome product you find. But you don't know if it's the largest.

I'm working backwards through the range of numbers beginning with '999.' Hence the extra verbosity in the block with the call to the downto method. (999..1).each do doesn't work, and (1..999).each do really shouldn't work either because ranges are not defined by their content, just a beginning state and an end state. So counting backwards the first palindrome I find is the largest. And the outer block isn't necessary, but I include it just for the sake of being thorough I guess.

The problem here is that the products you're getting aren't ordered. Which means that if you get a palindrome, you cannot be sure it's the largest.

In fact, I run your code and I got 999 * 91 = 90909, which is not correct. Even if you limit your range to 999 to 100 (we're looking for 3-digit factors after all), you'd get 995 * 583 = 580085. But the largest palindrome is 993 * 913 = 906609, which comes after the others.

## re: Project Euler #4 - Largest Palindrome Product VIEW POST

FULL DISCUSSIONHere's my Ruby solution. There's probably a much more clever way to do this. Probably a more Ruby way to do it for that matter.

If I understand it correctly (correct me if I'm wrong, I don't know Ruby), this doesn't work in general, as it prints the

firstpalindrome product you find. But you don't know if it's thelargest.Unless you can prove it is 🤷♂️ (I have no idea).

I'm working backwards through the range of numbers beginning with '999.' Hence the extra verbosity in the block with the call to the downto method.

(999..1).each dodoesn't work, and(1..999).each doreally shouldn't work either because ranges are not defined by their content, just a beginning state and an end state. So counting backwards the first palindrome I find is the largest. And the outer block isn't necessary, but I include it just for the sake of being thorough I guess.The problem here is that the products you're getting aren't ordered. Which means that if you get a palindrome, you cannot be sure it's the largest.

In fact, I run your code and I got

`999 * 91 = 90909`

, which is not correct. Even if you limit your range to 999 to 100 (we're looking for 3-digit factors after all), you'd get`995 * 583 = 580085`

. But the largest palindrome is`993 * 913 = 906609`

, which comes after the others.