(defn first-digit [n] (Integer/parseInt (subs (str n) 0 1))) (defn last-digit [n] (mod n 10)) (defn bookend-number [n] (+ (* 10 (first-digit n)) (last-digit n))) (defn is-gapful? [n] (and (>= n 100) (zero? (mod n (bookend-number n))))) (defn gapful-from [n] (filter is-gapful? (iterate inc n))) (defn gapful [] (gapful-from 1)) (defn gapfuls-in-range [start size] (take size (gapful-from start))) (defn report-range [[start size]] (doall (map println [(format "First %d gapful numbers >= %d:" size start) (gapfuls-in-range start size) ""]))) (doall (map report-range [ [1 30] [1000000 15] [1000000000 10] ]))