Sha256: 7a1d9d738ef41840e66268400048d74c9ef1d3c7680f036bbd232b9ab835c00f

Contents?: true

Size: 980 Bytes

Versions: 322

Compression:

Stored size: 980 Bytes

Contents

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

Version data entries

322 entries across 322 versions & 1 rubygems

Version Path
trackler-2.2.1.104 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.103 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.102 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.101 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.100 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.99 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.98 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.97 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.96 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.95 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.94 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.93 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.92 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.91 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.90 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.89 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.88 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.87 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.86 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm
trackler-2.2.1.85 tracks/elm/exercises/roman-numerals/RomanNumerals.example.elm