-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path89.hs
More file actions
29 lines (25 loc) · 828 Bytes
/
89.hs
File metadata and controls
29 lines (25 loc) · 828 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import Text.ParserCombinators.Parsec
val [] = 0
val ('M':xs) = 1000 + val xs
val ('D':xs) = 500 + val xs
val ('C':'D':xs) = 400 + val xs
val ('C':'M':xs) = 900 + val xs
val ('C':xs) = 100 + val xs
val ('L':xs) = 50 + val xs
val ('X':'L':xs) = 40 + val xs
val ('X':'C':xs) = 90 + val xs
val ('X':xs) = 10 + val xs
val ('V':xs) = 5 + val xs
val ('I':'V':xs) = 4 + val xs
val ('I':'X':xs) = 9 + val xs
val ('I':xs) = 1 + val xs
val _ = 0
toRN n = replicate m 'M' ++ rnC c ++ rnX x ++ rnI i
where (m,rm) = divMod n 1000
(c,rc) = divMod rm 100
(x,i) = divMod rc 10
rnC n = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"] !! n
rnX n = ["","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"] !! n
rnI n = ["","I","II","III","IV","V","VI","VII","VIII","IX"] !! n
--8107 minimal
--8850 nonmin