Problem 28

Statement
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 both diagonals is 101.

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

Solution

class Spiral
  def initialize(size)
    @size = size
  end

  def sum_first_diagonal
    sum = 0
    nb = 1
    inc = 0
    (@size).times do |i|
      nb += inc
      sum += nb
      inc += 2
    end
    return sum
  end

  def sum_second_diagonal
    sum = 0
    nb = 1
    inc = 0
    (@size).times do |i|
      nb += inc
      sum += nb
      inc += 4 if i%2==0
    end
    return sum
  end

  def sum_diagonals
    sum_first_diagonal+sum_second_diagonal-1
  end
end

spiral = Spiral.new(1001)

puts spiral.sum_diagonals
No tags for this post.

SPEAK / ADD YOUR COMMENT
Comments are moderated.

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>