Project Euler – Problem 83 Solution

Yan Cui

I help clients go faster for less using serverless technologies.

This article is brought to you by

Don’t reinvent the patterns. Catalyst gives you consistent APIs for messaging, data, and workflow with key microservice patterns like circuit-breakers and retries for free.

Try the Catalyst beta

The problem description is here, and click here to see all my other Euler solutions in F#.

 

This is a more difficult version of problem 82, and now you can move in all four directions!

As before, we start by loading the input data into a 2D array:

Prob83_01

and initialize another matrix of the same size to hold the minimum sum leading to each cell:

Prob83_02v2

What we have done differently this time though, is to choose initial defaults:

  • for the top-left corner (0, 0) the minimum sum is itself
  • for all other cells at (row, col) we’ll always traverse right and then down
    • if row = 0, then this equates to only move right until we reach col
    • if col = 0, then this equates to only move down until we reach row

e.g.

Prob83_03

Next, as we did for the problem 82, we’ll add a couple of helper to help us traverse both matrices:

Prob83_04

and we’ll find the new minimum sum to each cell by taking the minimum from the four directions:

Prob83_05

Unlike before, we can’t isolate to optimizing one column at a time, and instead we’ll need to traverse the whole matrix. For better cache locality, we’ll traverse row first and recursively optimize the whole matrix until no more optimization is possible:

Prob83_06

Finally, find the final value for the bottom-right corner of the sum matrix:

Prob83_07

This solution runs in 73ms on my laptop.

 

The source code for this solution is here.

Whenever you’re ready, here are 3 ways I can help you:

  1. Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
  2. I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
  3. Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.

1 thought on “Project Euler – Problem 83 Solution”

  1. Pingback: F# Weekly #6, 2016 | Sergey Tihon's Blog

Leave a Comment

Your email address will not be published. Required fields are marked *