생성일: 2019년 12월 17일
수정일: 2023년 08월 11일

4clojure - Word Sorting (70)

  1. 문제
  2. 풀이

문제

(= (__  "Have a nice day.")
   ["a" "day" "Have" "nice"])

(= (__  "Clojure is a fun language!")
   ["a" "Clojure" "fun" "is" "language"])

(= (__  "Fools fall for foolish follies.")
   ["fall" "follies" "foolish" "Fools" "for"])

풀이

(fn [st]
  (sort-by clojure.string/lower-case (re-seq #"\w+" st)))

나눠서 sort 하면 되겠거니 하고 시도를 했다.

(clojure.string/split "Have a nice day." #" ")
;; ["Have" "a" "nice" "day."]

(sort (clojure.string/split "Have a nice day." #" "))
;; ("Have" "a" "day." "nice")

대문자가 생각대로 sort가 안되서 lowercase를 사용 하였다.

(sort #(compare (clojure.string/lower-case %1) (clojure.string/lower-case %2)) (clojure.string/split "Have a nice day." #" "))
;; ("a" "day." "Have" "nice")

되겠거니 하고 답을 제출 했는데 unittest failed가 나오는 것이다. 라이브러리가 지원을 안하는 것인가? 하고 생각을 해보니..마지막 단어에 붙어 있는 마침표가 문제 였다.

그래서 정규식으로 다시 바꿔서 시도를 했다.

(re-seq #"\w+" "Have a nice day.")
;; ("Have" "a" "nice" "day")

마침표는 버리고 단어만 분리가 되는 것을 알수 있다. 이것 때문에 잘 실행 되고 있는 사이트 탓을 하였다. 왜냐하면 repl에서는 잘 되어서 단순하게 생각 했던 것 같다.

Tags: 4clojure Today I Learn