Skip to content

Instantly share code, notes, and snippets.

@AlbertMoscow
Last active October 26, 2019 05:21

Revisions

  1. AlbertMoscow revised this gist Jul 17, 2013. 1 changed file with 10 additions and 18 deletions.
    28 changes: 10 additions & 18 deletions roman_numerals.exs
    Original file line number Diff line number Diff line change
    @@ -1,32 +1,24 @@
    defmodule RomanNumerals do

    @moduledoc """
    @moduledoc """
    Task definition: Create a function taking a positive integer as its parameter and
    returning a string containing the Roman Numeral representation of that integer.
    """

    def convert 0 do
    ''
    end

    def convert(number) when number >= 10 do
    'X' ++ convert(number - 10)
    end
    def convert(number) do
    convert(number, [[10,'X'], [9,'IX'], [5,'V'], [4,'IV'], [1,'I']])
    end

    def convert(number) when number >= 9 do
    'IX' ++ convert(number - 9)
    defp convert(0, _) do
    ''
    end

    def convert(number) when number >= 5 do
    'V' ++ convert(number - 5)
    defp convert(number, [[arabic, roman]|_] = l) when number >= arabic do
    roman ++ convert(number - arabic, l)
    end

    def convert(number) when number >= 4 do
    'IV' ++ convert(number - 4)
    end

    def convert(number) when number >= 1 do
    'I' ++ convert(number - 1)
    defp convert(number, [_|t]) do
    convert(number, t)
    end
    end

  2. AlbertMoscow created this gist Jul 17, 2013.
    58 changes: 58 additions & 0 deletions roman_numerals.exs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,58 @@
    defmodule RomanNumerals do

    @moduledoc """
    Task definition: Create a function taking a positive integer as its parameter and
    returning a string containing the Roman Numeral representation of that integer.
    """

    def convert 0 do
    ''
    end

    def convert(number) when number >= 10 do
    'X' ++ convert(number - 10)
    end

    def convert(number) when number >= 9 do
    'IX' ++ convert(number - 9)
    end

    def convert(number) when number >= 5 do
    'V' ++ convert(number - 5)
    end

    def convert(number) when number >= 4 do
    'IV' ++ convert(number - 4)
    end

    def convert(number) when number >= 1 do
    'I' ++ convert(number - 1)
    end
    end

    ExUnit.start

    defmodule RomanNumeralsTest do
    use ExUnit.Case

    test "converts arabic numbers to roman" do
    Enum.each [ [1,'I'],
    [2,'II'],
    [3,'III'],
    [4,'IV'],
    [5,'V'],
    [6,'VI'],
    [7,'VII'],
    [8,'VIII'],
    [9,'IX'],
    [10,'X'],
    [11,'XI'],
    [14,'XIV'],
    [19,'XIX'],
    [20,'XX'],
    [25,'XXV'],
    [27,'XXVII'] ], fn [arabic, roman] ->
    assert roman == RomanNumerals.convert(arabic)
    end
    end
    end