Problema - Largest palindrome product
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.
Un número capicúa se lee igual en ambos sentidos. El mayor capicúa compuesto del producto de dos números de 2 dígitos es 9009 = 91 × 99 . Encuentra el mayor capicúa compuesto del producto de dos números de 3 cifras .
Solución paquete base
# Función para invertir cadena de texto
strReverse <- function(x)
sapply(lapply(strsplit(x, NULL), rev), paste, collapse = "")
# Cálculos
x <- seq(100, 999)
z <- expand.grid(x = x, y = x) # Producto cartesiano
mult<- z$x*z$y
rev <- as.integer(strReverse(as.character(mult)))
df <- data.frame(z, mult, rev, dif = mult-rev)
max(subset(df, dif == 0)[ ,"mult"])
[1] 906609
# Filtrando con dplyr
require(dplyr)
filter(df, dif == 0) %>%
summarise(max(mult))
max(mult)
1 906609
Solución paquete sqldf
require(sqldf)
x <- data.frame(x = 100:999)
y <- data.frame(y = 100:999)
df <- sqldf("select x, x `y`, x*y 'mult', reverse(x*y) 'rev', (x*y)-reverse(x*y) 'dif' from x, y where (x*y)-reverse(x*y) = 0")
max(df$mult)
# O bien
max(sqldf("select x, x `y`, x*y 'mult', reverse(x*y) 'rev', (x*y)-reverse(x*y) 'dif' from x, y where (x*y)-reverse(x*y) = 0")$mult)
Referencias
No hay comentarios:
Publicar un comentario