Generating lists of sequences of specified lengths
Your function seems very well suited to the Clojure iterate function, which takes a function that turns state into state:

(def shifts [5 5 5 5 5 2 2 5 5 5 5 5 2 2])
(def total-shifts (apply + shifts))
(def genes (vec (range total-shifts)))

(defn transition [[answer shifts-remaining genes-remaining]]
  (let [[num-shifts &amp; more-shifts] shifts-remaining
        [genes-in-day rest-of-genes] (split-at num-shifts genes-remaining)]
    [(conj answer genes-in-day) more-shifts rest-of-genes]))

(-&gt;&gt; (iterate transition [[] shifts genes])
     (drop (count shifts))
     ffirst)