Yan Cui

I help clients go faster for less using serverless technologies.

#### Problem

Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:

It can be verified that the sum of the numbers on the diagonals is 101.

What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?

#### Solution

let rec sumDiagonals n m total max = match n with | 1 -> sumDiagonals (n+1) m 1 1 | _ when n > m -> total | _ when n % 2 = 0 -> sumDiagonals (n+1) m total max | _ -> let newValues = [1..4] |> List.map (fun x -> max + x * (n-1)) let newMax = newValues |> List.max let newTotal = total + (newValues |> List.sum) sumDiagonals (n+1) m newTotal newMax let answer = sumDiagonals 1 1001 0 0

As you’ve probably noticed already, there’s a pattern in the sequence 1, 3, 5, 7, 9, 13, 17, 21, 25, … generated by the spiral in the problem brief. As the dimension goes up by 2 at a time, all odd numbers, 4 new numbers are added to the sequence:

Dimension (d) | Numbers on the edge of the square | Max number from last dimension |

1 | 1 | |

3 | 3, 5, 7, 9 | 1 |

5 | 13, 17, 21, 25 | 9 |

Looking at the above table, it quickly becomes clear that the new numbers that are added to the diagonals when you expand the dimension by 2 can be calculated as:

max number from last dimension + (d-1) * i (where i is a number from 1 to 4)

My solution simply wraps this logic in a recursive function whilst keeping a running total of all the numbers that have been generated.

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

- If you want a one-stop shop to help you
**quickly level up your serverless skills**, you should check out my**Production-Ready Serverless**workshop. Over 20 AWS Heroes & Community Builders have passed through this workshop, plus 1000+ students from the likes of AWS, LEGO, Booking, HBO and Siemens. - If you want to learn
**how to test serverless applications**without all the pain and hassle, you should check out my latest course,**Testing Serverless Architectures**. - If you’re a manager or founder and want to help your team
**move faster and build better software**, then check out my**consulting services**. - If you just want to hang out, talk serverless, or ask for help, then you should join my
**FREE****Community**.