Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,20 @@
|
|||
-module(roman).
|
||||
-export([to_roman/1]).
|
||||
|
||||
to_roman(0) -> [];
|
||||
to_roman(X) when X >= 1000 -> [$M | to_roman(X - 1000)];
|
||||
to_roman(X) when X >= 100 ->
|
||||
digit(X div 100, $C, $D, $M) ++ to_roman(X rem 100);
|
||||
to_roman(X) when X >= 10 ->
|
||||
digit(X div 10, $X, $L, $C) ++ to_roman(X rem 10);
|
||||
to_roman(X) when X >= 1 -> digit(X, $I, $V, $X).
|
||||
|
||||
digit(1, X, _, _) -> [X];
|
||||
digit(2, X, _, _) -> [X, X];
|
||||
digit(3, X, _, _) -> [X, X, X];
|
||||
digit(4, X, Y, _) -> [X, Y];
|
||||
digit(5, _, Y, _) -> [Y];
|
||||
digit(6, X, Y, _) -> [Y, X];
|
||||
digit(7, X, Y, _) -> [Y, X, X];
|
||||
digit(8, X, Y, _) -> [Y, X, X, X];
|
||||
digit(9, X, _, Z) -> [X, Z].
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
-module( roman_numerals ).
|
||||
|
||||
-export( [encode_from_integer/1]).
|
||||
|
||||
-record( encode_acc, {n, romans=""} ).
|
||||
|
||||
encode_from_integer( N ) when N > 0 ->
|
||||
#encode_acc{romans=Romans} = lists:foldl( fun encode_from_integer/2, #encode_acc{n=N}, map() ),
|
||||
Romans.
|
||||
|
||||
|
||||
encode_from_integer( _Map, #encode_acc{n=0}=Acc ) -> Acc;
|
||||
encode_from_integer( {_Roman, Value}, #encode_acc{n=N}=Acc ) when N < Value -> Acc;
|
||||
encode_from_integer( {Roman, Value}, #encode_acc{n=N, romans=Romans} ) ->
|
||||
Times = N div Value,
|
||||
New_roman = lists:flatten( lists:duplicate(Times, Roman) ),
|
||||
#encode_acc{n=N - (Times * Value), romans=Romans ++ New_roman}.
|
||||
|
||||
map() -> [{"M",1000}, {"CM",900}, {"D",500}, {"CD",400}, {"C",100}, {"XC",90}, {"L",50}, {"XL",40}, {"X",10}, {"IX",9}, {"V",5}, {"IV",4}, {"I\
|
||||
",1}].
|
||||
Loading…
Add table
Add a link
Reference in a new issue