2010/2/9 Marc Chantreux
<khatar@phear.org>
par contre: une question relative a la lazyness me chagrine: en lisant le résultat
[(999,91,"90909")], on constate que seule la premiere valeur de x est nécessaire.
hors si j'écris reverse [1..999] (ou last dans la solution de Dan Popa), j'imagine
qu'haskell a besoin du tableau complet pour l'inverser (dans le cas de reverse)
ou en trouver le dernier élément (dans le cas de last).
Mes questions:
- mon intuition est-elle juste ?
Je pense que oui !
- suis-je en train de chercher la petitte bête ?
Non !
- si non: comment résoudre le pb ?
par exemple, utiliser la syntaxe suivante : [ 999,998..0 ]
le fait est que le programme devra quand même tester toutes les combinaisons pour garder la plus longue, alors je ne suis pas sûr que ca accélère les choses.
Notamment, on n'a aucune garantie que le dernier résultat soit le bon. D'ailleurs ton résultat est faux, comme tu peux le voir avec une version modifiée de ma solution:
(sous GHCI)
import Data.List
let l=[ (a,b,n) | a <- [1..999], b <- [a..999],let n=a*b,let n'=show n,n'==reverse n' ]
let s=sortBy (\(_,_,n1) (_,_,n2) -> compare n1 n2)
last $ s l
résultat :
(913,993,906609)
Cordialement,
David