elm/exercises/roman-numerals/RomanNumerals.example.elm
2016-12-17 17:29:40 -05:00

50 lines
980 B
Elm

module RomanNumerals exposing (toRoman)
import Dict
import Maybe
toRoman : Int -> String
toRoman number =
if number == 0 then
""
else
let
part =
largestFactor number
letter =
numerals
|> Dict.get part
|> Maybe.withDefault ""
in
letter ++ (toRoman (number - part))
largestFactor : Int -> Int
largestFactor number =
numerals
|> Dict.keys
|> List.filter (\p -> p <= number)
|> List.reverse
|> List.head
|> Maybe.withDefault 0
numerals : Dict.Dict Int String
numerals =
Dict.fromList
[ ( 1000, "M" )
, ( 900, "CM" )
, ( 500, "D" )
, ( 400, "CD" )
, ( 100, "C" )
, ( 90, "XC" )
, ( 50, "L" )
, ( 40, "XL" )
, ( 10, "X" )
, ( 9, "IX" )
, ( 5, "V" )
, ( 4, "IV" )
, ( 1, "I" )
]