elm/exercises/roman-numerals/RomanNumerals.example
2016-07-18 10:17:37 -04:00

46 lines
789 B
Text

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")
]