### Google Treasure Hunt, Question #4

A friend of mine asked me how I solved the fourth question of Google Treasure Hunt 2008 using Clojure. I didn’t keep the original code around, so below is how I could have done it.

First, define a primes seq.

Second, define a function which returns the sequence of sums of N consecutive primes:

(defn sum-primes [n] (map #(apply + %) (partition n 1 primes)))

Third, define a function which, taking a list of increasing sequences, returns the first common value.

(defn find= [seqs] (if (apply == (map first seqs)) (ffirst seqs) (let [[s1 & etc] (sort #(- (first %1) (first %2)) seqs)] (recur (cons (rest s1) etc)))))

Last, use them! Here is a sample question:

Find the smallest number that can be expressed as

the sum of 3 consecutive prime numbers,

the sum of 5 consecutive prime numbers,

the sum of 11 consecutive prime numbers,

the sum of 1493 consecutive prime numbers,

and is itself a prime number.

And here is how to compute the answer:

(find= (cons primes (map sum-primes [3, 5, 11, 1493])))

returns 9174901 in twenty seconds or so.

~~(Right now this code may throw a StackOverflow exception, please use one of those definition of ~~`partition`

.)