[Haskell-fr] euler 4: vos commentaires ?

David Virebayre dav.vire+haskell at gmail.com
Wed Feb 10 03:21:48 EST 2010


2010/2/9 Marc Chantreux <khatar at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-fr/attachments/20100210/8d6ca735/attachment.html


More information about the Haskell-fr mailing list