생성일: 2019년 11월 04일
수정일: 2023년 10월 18일
수정일: 2023년 10월 18일
4clojure - Duplicate a Sequence (32)
문제
(= (__ [1 2 3]) '(1 1 2 2 3 3))
(= (__ [:a :a :b :b]) '(:a :a :a :a :b :b :b :b))
(= (__ [[1 2] [3 4]]) '([1 2] [1 2] [3 4] [3 4]))
(= (__ [[1 2] [3 4]]) '([1 2] [1 2] [3 4] [3 4]))
풀이
mapcat (fn [x] (list x x))
mapcat #(repeat 2 %)
mapcat #(take 2 (iterate identity %))
값을 하나씩 추가로 생성을 하고 collection인 경우 collection을 그대로 복사하는 문제이다. mapcat을 사용하였는데 map + apply + concat으로 풀어서 해도 해결 가능 하다.
interleave를 사용하여 해결한 방식도 있었는데 같은 collection을 2번 합쳐서 해결하는 방식이 있었다.
interleave의 작동 방식을 테스트하는 예제를 만들어 봤다.
(interleave [4 5 6] [1 2 3])
;; (4 1 5 2 6 3)
(interleave [[4 5 6]] [1 2 3])
;; ([4 5 6] 1)
(interleave [4] [1 2 3])
;; (4 1)