Just another update
This commit is contained in:
parent
a25938f123
commit
00a190b0a6
6591 changed files with 94363 additions and 23227 deletions
|
|
@ -1,31 +1,17 @@
|
|||
(def arabic-roman-map
|
||||
{1 "I", 5 "V",
|
||||
10 "X", 50 "L",
|
||||
100 "C", 500 "D",
|
||||
1000 "M",
|
||||
4 "IV", 9 "IX",
|
||||
40 "XL", 90 "XC",
|
||||
400 "CD", 900 "CM" })
|
||||
(def roman-map
|
||||
(sorted-map
|
||||
1 "I", 4 "IV", 5 "V", 9 "IX",
|
||||
10 "X", 40 "XL", 50 "L", 90 "XC",
|
||||
100 "C", 400 "CD", 500 "D", 900 "CM"
|
||||
1000 "M"))
|
||||
|
||||
(def arabic-roman-map-sorted-keys
|
||||
(sort (keys arabic-roman-map)))
|
||||
(defn int->roman [n]
|
||||
{:pre (integer? n)}
|
||||
(loop [res (StringBuilder.), n n]
|
||||
(if-let [v (roman-map n)]
|
||||
(str (.append res v))
|
||||
(let [[k v] (->> roman-map keys (filter #(> n %)) last (find roman-map))]
|
||||
(recur (.append res v) (- n k))))))
|
||||
|
||||
(defn find-value-in-coll
|
||||
[coll k]
|
||||
(let [aval (find coll k)]
|
||||
(if (nil? aval) "" (val aval))))
|
||||
|
||||
(defn to-roman
|
||||
[result n]
|
||||
(let
|
||||
[closest-key-for-n (last (filter #(> n %) arabic-roman-map-sorted-keys))
|
||||
roman-value-for-n (find-value-in-coll arabic-roman-map n)
|
||||
roman-value-for-closet-to-n (find-value-in-coll arabic-roman-map
|
||||
closest-key-for-n)]
|
||||
(if (or (<= n 0)(contains? arabic-roman-map n))
|
||||
(conj result roman-value-for-n)
|
||||
(recur (conj result roman-value-for-closet-to-n)
|
||||
(- n closest-key-for-n)))))
|
||||
|
||||
Usage: >(to-roman [] 1999)
|
||||
result: ["M" "CM" "XC" "IX"]
|
||||
(int->roman 1999)
|
||||
; "MCMXCIX"
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
(defn a2r
|
||||
[a]
|
||||
(let [rv [1000 500 100 50 10 5 1]
|
||||
(defn a2r [a]
|
||||
(let [rv '(1000 500 100 50 10 5 1)
|
||||
rm (zipmap rv "MDCLXVI")
|
||||
dv (->> rv (take-nth 2) next (#(interleave % %)))]
|
||||
dv (->> rv (take-nth 2) next #(interleave % %))]
|
||||
(loop [a a rv rv dv dv r nil]
|
||||
(if (<= a 0)
|
||||
r
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue