Pregunta

Estoy trabajando en Proyecto Euler Problema 4 , y la necesidad de encontrar el palíndromo del producto de 2 números de 3 dígitos, por lo que se le ocurrió:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]

¿Por qué no funciona esto y cómo puedo hacer que funcione? Sospecho que necesito para obtener la respuesta de alguna manera en una lista para que se invierta y se comprueba si es un palíndromo.

¿Fue útil?

Solución

Esta parte

reverse [x*y] == [x*y]

que está mal. [x*y] es una lista con un solo elemento: el resultado de x*y. Lo contrario es la misma lista ...

Lo que queremos es el número con sus dígitos invertidos. Se necesita una lista con los dígitos del número. Un truco simple de hacerlo es convertir el número de la representación de cadena (recordemos que type String = [Char]). Para ello se puede utilizar show, en lugar de [ ]:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)]

Otros consejos

Usted no quiere aplicar la función inversa a una lista que contiene un solo número. Es necesario aplicar la función inversa a la representación de cadena de ese número.

Trate de usar la función "show".

Además, si usted tiene la fuerza suficiente para evitar mirarlo y arruinar todo el propósito del Proyecto de Euler, se puede ver en esto:

http://www.haskell.org/haskellwiki/Euler_problems

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top