For some reason, this week I decided to actually sign up for an account on projecteuler.net, our source of programming exercises. Then I went back and entered the answers I’d gotten for my past solutions, and did pretty well. However, I messed up number 11 (in 4 versions!). I thought perhaps I should perhaps some corrected code.

I had two things incorrect. First, my inner loop wasn’t going far enough (shame!). Second, I was only accounting for one type of diagonal (shame!). Here’s my corrected (hopefully!) code:

def solve(grid): t = time.time() print grid ret = 0 diffs = ( (1,0), (0,1), (1,1), (1,-1) ) for i in xrange(0,len(grid)): for j in xrange(0,len(grid[0])): for dt in diffs: dx,dy = dt try: p = 1 for k in xrange(0,4): p *= grid[i+dx*k][j+dy*k] ret = max(ret, p) except: pass t = time.time() - t return (ret, t)

I feel like I’m cheating a little when I use try-catch blocks like that. I feel like I should just index into the array to places I know exist, instead of relying on try to sort it out otherwise. But I also like not worrying about indexing (it was the source of one of my errors, after all). I also like looping over the “diffs”, to compute the product across, or down, or diagonally (either diagonal).

Now, on to new problems! I hope to post a solution to at least one this evening, before the (well-extended) deadline.