Pet*_*ron 2 string clojure rotation burrows-wheeler-transform
如何在Clojure中为Burrows-Wheeler转换惯用旋转字符串?
我想出了这个,(cycle "string")但是感觉有点迫切:
(let [s (str "^" "banana" "|")
l (count s)
c (cycle s)
m (map #(take l (drop % c)) (range l))]
(apply map str m))
=> ("^banana|" "banana|^" "anana|^b" "nana|^ba" "ana|^ban" "na|^bana" "a|^banan" "|^banana")
Run Code Online (Sandbox Code Playgroud)
我不确定这是否符合代码高尔夫的要求.有更清洁的方法吗?
我会做:
(defn bwrot [s]
(let [s (str "^" s "|")]
(for [i (range (count s))]
(str (subs s i) (subs s 0 i)))))
Run Code Online (Sandbox Code Playgroud)
要么:
(defn bwrot [s]
(let [n (+ 2 (count s))
s (str "^" s "|^" s "|")]
(for [i (range n)]
(subs s i (+ i n)))))
Run Code Online (Sandbox Code Playgroud)
第二个应该分配更少(每个迭代一个字符串而不是三个).