1. Miki Tebeka
  2. euler

Source

euler / clojure / 28.clj

; 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?
;
; Answer: 669171001

(defn corners [start size]
  (take 4 (iterate #(+ % size) start)))

(defn sum-diagonals [max-size]
  (loop [start 3 size 2 sum-d 1]
    (if (> (inc size) max-size)
      sum-d
      (let [cs (corners start size)
            new-size (+ size 2)]
        (recur (+ (last cs) new-size)
               new-size
               (apply + (cons sum-d cs)))))))

(prn (sum-diagonals 1001))