
On Sat, Sep 29, 2012 at 2:36 AM, Chaddaï Fouché
On Sat, Sep 29, 2012 at 2:44 AM, Darren Grant
wrote: On Fri, Sep 28, 2012 at 4:57 PM, Sean Perry
wrote: Have you looked at http://www.haskell.org/haskellwiki/Euler_problems/11_to_20#Problem_14?
The page is full of interesting and fast solutions once you have worked out your own versions.
Hah I didn't know the Haskell Wiki had a Project Euler page. I'll definitely be reviewing with that resource.
I notice the use of Array instead of Map, and the careful use of unboxed types. :)
This comment is misleading, there are no unboxed type in this solution (maybe the author meant that this compiled down to unboxed types with optimisations but the Haskell code definitely use boxed types : Int and Word32) though there's a little bit of parallelism involved (could be improved).
You are correct. Thanks for pointing out the distinction between compiler optimizing down to unboxed types and actually declaring these types in code.
The use of a functional (immutable) Array here makes perfect sense since the keys are effectively an interval of Int... Note that my old Array version rely on the laziness of the Array to make it work, this is basically dynamic programming where the order of computation appears natural but only because laziness means it will be determined by the computation itself. This is perfectly functional, no need to resort to any imperative style here (or most everywhere in project Euler).
-- Jedaï
This is exactly the kind of recursive function I was trying to set up with map, but didn't get the algorithm right. I expect the immutable Array must be much lighter weight than the immutable Map. Cheers, Darren