elm/exercises/roman-numerals/RomanNumerals.example

47 lines
789 B
Text
Raw Normal View History

2016-07-18 14:17:37 +00:00
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")
]