[Haskell-cafe] Re: Hints for Euler Problem 11

Dave Bayer bayer at math.columbia.edu
Fri Jul 20 08:12:47 EDT 2007


Ronald Guida <ronguida <at> mindspring.com> writes:

> I started looking at the Euler problems [1].  I had no trouble with
> problems 1 through 10, but I'm stuck on problem 11.  I am aware that
> the solutions are available ([2]), but I would rather not look just
> yet.

I am the author of that solution

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

My solution has a word count of 191 words, which might amuse you considering
that there are 400 entries to the table.

Hint: "zipWith4" is your friend; see Data.List. Feed it four lists of different
lengths, and it stops gracefully when any list runs out. So one can use

	skew (w,x,y,z) = (w, drop 1 x, drop 2 y, drop 3 z)

to stagger four lists before multiplying corresponding elements.

I was using the Euler problems to learn Haskell, as you're doing, so I don't
know if my solution is the most readable one. I built up a vocabulary of short
functions to compose.

I remember finding it odd at the time that I had to use tuples to handle
multiple return values. C annoyed me for being mostly peanut shells and few
peanuts: one seems to spend all of one's time tossing arguments back and forth
onto the stack for nested function calls, when it seemed that the real work
could be done in place with less effort. Sure, optimizing compilers do exactly
that, with registers, but then why was I explicitly worrying about passing
around all of these arguments, in order to code in C?

Haskell is much more concise, but the tupling and untupling in my code seems a
distraction, even looking back at it now.



More information about the Haskell-Cafe mailing list