# Project Euler Q4 :: Largest palindrome product

Explanation. Standard caveat: don’t look here if you are trying to do these yourself.

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.

This seems like another brute-force question. There’s not that many numbers to test.

## check the worked solution 91*99 # 9009

I’m not aware of an `is.palindrome`

function, but it’s easy enough to code.

is.palindrome <- function(x) { ## convert to character and explode x <- unlist(strsplit(as.character(x), "")) ## check if the vector is palindromic return(identical(x, rev(x))) } is.palindrome(9009) # TRUE is.palindrome(9001) # FALSE

Let’s try it out for the two digit example and make sure we’re on the right track. Multiply all two digit numbers together and test them for palindrome-ness, then find the largest of those.

twodigits <- 10:99 prods <- expand.grid(twodigits, twodigits) prods$prod <- prods[ ,1]*prods[ ,2] prods.palindromes <- prods$prod[sapply(prods$prod, is.palindrome)] max(prods.palindromes) # 9009

Great! What about three digits?

threedigits <- 100:999 prods <- expand.grid(threedigits, threedigits) prods$prod <- prods[ ,1]*prods[ ,2] prods.palindromes <- prods$prod[sapply(prods$prod, is.palindrome)] largest <- max(prods.palindromes) largest # 906609 ### CORRECT

Takes a little longer, and generates a nice little 10MB, 810,000 element vector along the way.

format(object.size(prods), units="Mb") # 9.4 Mb

The two three digit numbers?

prods[prods$prod==largest, ] # 913 993

## Leave a Reply