Interestingly, I am also running into timeouts on problem 150 with
code which quickly passes all the tests in a REPL on my machine. As
far as I can see, my code does not have any Java interop. Any other
ideas?
(fn palindromes [min]
(let [smin (str min)
init-power (dec (count smin))
pals
(fn [outer-power]
(letfn [(gen [power ds] (lazy-seq
(let [shell #(+ % (apply * % (repeat power 10)))
expand
(fn [d]
(let [outer (shell d)]
(for [n (gen (- power 2) (rest ds))]
(+ outer (* 10 n))
)))
]
(cond
(zero? power) (range 10)
(= power 1) (range (if (= outer-power 1) 11
0) 100 11)
:else
(let [mind (if (= power outer-power) 1 0)
d (if-let [dc (first ds)]
(max mind (- (int dc) (int \0)))
mind)]
(mapcat expand (range d 10)))
))))
]
(gen outer-power (when (= outer-power init-power) smin))
))
sq (if (zero? init-power)
(mapcat pals (range))
(mapcat pals (iterate inc init-power)))
]
(drop-while #(< % min) sq)
))