В настоящее время я работаю над заданием предложить решение для простого алгоритма «сжатия / кодирования». Задача состоит в том, чтобы сжать последующие одинаковые буквы в строке: «...

1
GitCrush 27 Дек 2020 в 11:51

1 ответ

Лучший ответ

Вариант уменьшения может быть примерно таким:

(defn process [s]
  (->> (reduce (fn [[res counter a] b]
                 (if (= a b)
                   [res (inc counter) b]
                   [(conj res counter a) 1 b]))
               [[] 0 nil]
               s)
       (apply conj)
       (drop 2)
       (apply str)))

user> (process "AABBCCCCC")
;;=> "2A2B5C"

Хотя я бы, вероятно, пошел с функциями последовательности clojure:

(->> "AABBCCCC"
     (eduction (partition-by identity)
               (mapcat (juxt count first)))
     (apply str))
;;=> "2A2B4C"
1
leetwinski 27 Дек 2020 в 10:28