A keen eyed Clojurian has spotted that my revised function for dropping every nth item from a sequence has a bug. It was this function:-
(defn drop-nth [n s]
(flatten (map drop-last (partition-all n s))))
My mistake was that by using partition-all to break up the original sequence I get a final sub-sequence that will generally have less than n elements. Therefore when I drop-last I lose one element I wanted to keep. For example all these sequences should include the final element 13:-
user=> (def s [1 2 3 4 5 6 7 8 9 10 11 12 13])
#'user/s
user=> s
[1 2 3 4 5 6 7 8 9 10 11 12 13]
user=> (drop-nth 3 s)
(1 2 4 5 7 8 10 11)
user=> (drop-nth 4 s)
(1 2 3 5 6 7 9 10 11)
user=> (drop-nth 5 s)
(1 2 3 4 6 7 8 9 11 12)
So really instead of dropping the last element on the assumption that there are n altogether I need to take n-1 elements. So the function now looks like this:-
(defn drop-nth [n s]
(flatten (map #(take (- n 1) %) (partition-all n s))))
user=> (drop-nth 3 s)
(1 2 4 5 7 8 10 11 13)
user=> (drop-nth 4 s)
(1 2 3 5 6 7 9 10 11 13)
user=> (drop-nth 5 s)
(1 2 3 4 6 7 8 9 11 12 13)
That's more like it.