Question

Je travaille sur le projet Euler Problème 4 , et le besoin de trouver le palindrome du produit de 2 numéros à 3 chiffres, alors je suis venu avec:

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

Pourquoi pas ce travail et comment puis-je le faire fonctionner? Je pense que je dois obtenir en quelque sorte la réponse dans une liste afin qu'il soit inversé et vérifié si elle est un palindrome.

Était-ce utile?

La solution

Cette partie

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

est faux. [x*y] est une liste avec un seul élément: le résultat de x*y. L'inverse est la même liste ...

Qu'est-ce que vous voulez est le nombre de ses chiffres sont intervertis. Vous avez besoin d'une liste avec les chiffres du numéro. Une astuce simple à faire est de convertir le nombre à sa représentation de chaîne (rappelez-vous que type String = [Char]). Pour ce faire, vous pouvez utiliser show, au lieu de [ ]:

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

Autres conseils

Vous ne voulez pas appliquer la fonction inverse à une liste qui contient un numéro unique. Vous devez appliquer la fonction inverse à la représentation de chaîne de ce nombre.

Essayez d'utiliser la fonction "show".

En outre, si vous avez assez de force pour éviter de regarder et ruiner tout l'objet du projet Euler, vous pouvez regarder ceci:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top