Skip to content

Instantly share code, notes, and snippets.

@tnoborio
Forked from hozumi/meisuu.clj
Created December 14, 2010 01:36
Show Gist options
  • Save tnoborio/739886 to your computer and use it in GitHub Desktop.
Save tnoborio/739886 to your computer and use it in GitHub Desktop.
(use 'clojure.contrib.str-utils)
(def digits {\零 0 \一 1 \二 2 \三 3 \四 4 \五 5 \六 6 \七 7 \八 8 \九 9})
(def n-keta {\千 1000, \百 100, \十 10})
(defn digit-and-rest [s & rest]
(if-let [n (digits s)]
[n rest]
[1 (cons s rest)]))
(defn- trans-keta [s]
(if (seq s)
(let [[n [keta & rest]] (apply digit-and-rest s)]
(+ (* n (n-keta keta 1)) (trans-keta rest)))
0))
(defn- split-keta [s]
(partition-all 2 (rest (re-partition #"[零一二三四五六七八九十百千]+" s))))
(defn- ruijou [a n]
(reduce * (repeat n a)))
(def meisuu {"万" 4
"億" 8
"兆" 12
"京" 16
"垓" 20
"叙" 24
"穣" 28
"溝" 32
"澗" 36
"正" 40
"載" 44
"極" 48
"恒河沙" 52
"阿僧祇" 56
"那由多" 60
"不可思議" 64
"無量大数" 68})
(defn kanji->number [[kazu tanni]]
(* (trans-keta kazu) (ruijou 10 (meisuu tanni 0))))
(defn trans-meisuu [s]
(reduce + (map kanji->number (split-keta s))))
; (trans-meisuu "千")
; (trans-meisuu "十億二千万八百五")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment