Project Euler

Problem 28: Number spiral diagonals

Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:
21 22 23 24 25
20 7 8 9 10
19 6 1 2 11
18 5 4 3 12
17 16 15 14 13

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? Run this solution at repl.io here.

      
        # notes: 
        # 1) 5 x 5 spiral has 25 numbers, hence 1001 x 1001 spiral has 1002001 numbers
        # 2) each square contains an odd square of terms: 1, 9, 25, 49 etc..

        odd_squares = [i*i for i in range(1001) if i % 2 != 0]

        diag_nums = [1]

        for i in odd_squares:
          #for each corner add a multiple of k (which is the length of the side of the previous square + 1)
          # (to see the pattern unravel, change range to 5)
          k = int(i**0.5)+1
          diag_nums.append(i+k)
          diag_nums.append(i+2*k)
          diag_nums.append(i+3*k)
          diag_nums.append(i+4*k)

        print(sum(diag_nums))
      
    

back to code menu