Last active
May 13, 2016 02:51
-
-
Save chriswright47/2edd9cb328007e237b672428675fbc71 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| defmodule ElixirRomanNumerals do | |
| def to_roman(n) do | |
| to_roman n, "" | |
| end | |
| defp to_roman(n, string) when n >= 1000 do | |
| to_roman rem(n,1000), string <> stringify(trunc(n/1000), "M") | |
| end | |
| defp to_roman(n, string) when n >= 100 do | |
| to_roman rem(n,100), string <> stringify(trunc(n/100), "C", "D", "M") | |
| end | |
| defp to_roman(n, string) when n >= 10 do | |
| to_roman rem(n,10), string <> stringify(trunc(n/10), "X", "L", "C") | |
| end | |
| defp to_roman(n, string) when n >= 1 do | |
| to_roman 0, string <> stringify(n, "I", "V", "X") | |
| end | |
| defp to_roman(0, string), do: string | |
| defp stringify(thousands, "M"), do: String.duplicate "M", thousands | |
| defp stringify(9, one_char, five_char, ten_char), do: one_char <> ten_char | |
| defp stringify(n, one_char, five_char, ten_char) when n > 4 do | |
| five_char <> String.duplicate(one_char, rem(n, 5)) | |
| end | |
| defp stringify(4, one_char, five_char, ten_char), do: one_char <> five_char | |
| defp stringify(n, one_char, five_char, ten_char), do: String.duplicate(one_char, n) | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment