Skip to content

Instantly share code, notes, and snippets.

@bsiegel
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bsiegel/8793630 to your computer and use it in GitHub Desktop.
Save bsiegel/8793630 to your computer and use it in GitHub Desktop.
(ns roman.core)
(declare roman)
(defn -main [& args]
(if (= (count args) 1)
(let [arabic (read-string (first args))]
(if (number? arabic)
(println (roman arabic ""))
(println "Must enter a number")))
(println "Must pass exactly one parameter")))
(defn roman [arabic acc]
(cond
(<= arabic 0) acc
(< arabic 4) (roman (- arabic 1) (str acc "I"))
(< arabic 5) (roman (- arabic 4) (str acc "IV"))
(< arabic 9) (roman (- arabic 5) (str acc "V"))
(< arabic 10) (roman (- arabic 9) (str acc "IX"))
(< arabic 40) (roman (- arabic 10) (str acc "X"))
(< arabic 50) (roman (- arabic 40) (str acc "XL"))
(< arabic 90) (roman (- arabic 50) (str acc "L"))
(< arabic 100) (roman (- arabic 90) (str acc "XC"))
(< arabic 400) (roman (- arabic 100) (str acc "C"))
(< arabic 500) (roman (- arabic 400) (str acc "CD"))
(< arabic 900) (roman (- arabic 500) (str acc "D"))
(< arabic 1000) (roman (- arabic 900) (str acc "CM"))
:else (roman (- arabic 1000) (str acc "M"))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment