Detecta productos palíndromos en un rango dado.
Un número palíndromo es un número que sigue siendo el mismo cuando se invierten sus cifras.
Por ejemplo, 121 es un número palíndromo, pero 112 no lo es.
Dado un rango de números, encuentra los palíndromos mayor y menor que sean producto de dos números dentro de ese rango.
Tu solución debe devolver los palíndromos mayor y menor, junto con los factores de cada uno dentro del rango. Si el palíndromo mayor o el menor tiene más de un par de factores dentro del rango, devuelve todos los pares.
Dado el rango [1, 9] (ambos inclusive)...
Y dado el array de todos los productos posibles dentro de este rango:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 15, 21, 24, 27, 20, 28, 32, 36, 25, 30, 35, 40, 45, 42, 48, 54, 49, 56, 63, 64, 72, 81]
Los productos palíndromos son todos números de una sola cifra (en este caso):
[1, 2, 3, 4, 5, 6, 7, 8, 9]
El producto palíndromo más pequeño es 1.
Sus factores son (1, 1).
El producto palíndromo más grande es 9.
Sus factores son (1, 9) y (3, 3).
Dado el rango [10, 99] (ambos inclusive)...
El producto palíndromo más pequeño es 121.
Sus factores son (11, 11).
El producto palíndromo más grande es 9009.
Sus factores son (91, 99).
Para resolver este ejercicio tienes que implementar estas dos funciones:
largestPalindromesmallestPalindromeAmbas funciones reciben un límite inferior y otro superior para los factores y devuelven un par (value, [(factor1, factor2)]) que contiene el palíndromo y sus posibles pares de factores.
Puedes usar las firmas proporcionadas si no estás seguro de los tipos, pero no dejes que restrinjan tu creatividad.
No pasa nada por devolver duplicados en el array de factores, y el orden de los factores es irrelevante.
Deberías plantearte usar un algoritmo ligeramente distinto para encontrar palíndromos pequeños o grandes.
Regístrate en Exercism para aprender y dominar Haskell con 107 ejercicios y mentoría humana real, todo gratis.