Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,17 @@
|
|||
defmodule Roman_numeral do
|
||||
def encode(0), do: ''
|
||||
def encode(x) when x >= 1000, do: [?M | encode(x - 1000)]
|
||||
def encode(x) when x >= 100, do: digit(div(x,100), ?C, ?D, ?M) ++ encode(rem(x,100))
|
||||
def encode(x) when x >= 10, do: digit(div(x,10), ?X, ?L, ?C) ++ encode(rem(x,10))
|
||||
def encode(x) when x >= 1, do: digit(x, ?I, ?V, ?X)
|
||||
|
||||
defp digit(1, x, _, _), do: [x]
|
||||
defp digit(2, x, _, _), do: [x, x]
|
||||
defp digit(3, x, _, _), do: [x, x, x]
|
||||
defp digit(4, x, y, _), do: [x, y]
|
||||
defp digit(5, _, y, _), do: [y]
|
||||
defp digit(6, x, y, _), do: [y, x]
|
||||
defp digit(7, x, y, _), do: [y, x, x]
|
||||
defp digit(8, x, y, _), do: [y, x, x, x]
|
||||
defp digit(9, x, _, z), do: [x, z]
|
||||
end
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
defmodule Roman_numeral do
|
||||
@symbols [ {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'} ]
|
||||
def encode(num) do
|
||||
{roman,_} = Enum.reduce(@symbols, {[], num}, fn {divisor, letter}, {memo, n} ->
|
||||
{memo ++ List.duplicate(letter, div(n, divisor)), rem(n, divisor)}
|
||||
end)
|
||||
Enum.join(roman)
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
Enum.each([1990, 2008, 1666], fn n ->
|
||||
IO.puts "#{n}: #{Roman_numeral.encode(n)}"
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue