Yan Cui
I help clients go faster for less using serverless technologies.
This article is brought to you by
I never fully recovered my workspace setup when I upgraded my laptop two years ago, and I still miss things today. If only I had known about Gitpod back then…
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:
and initialize another matrix of the same size to hold the minimum sum leading to each cell:
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.
Next, as we did for the problem 82, we’ll add a couple of helper to help us traverse both matrices:
and we’ll find the new minimum sum to each cell by taking the minimum from the four directions:
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:
Finally, find the final value for the bottom-right corner of the sum matrix:
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:
- 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.
- 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.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Pingback: F# Weekly #6, 2016 | Sergey Tihon's Blog