36 lines
854 B
JavaScript
36 lines
854 B
JavaScript
(() => {
|
|
// romanValue :: String -> Int
|
|
const romanValue = s =>
|
|
s.length ? (() => {
|
|
const parse = [].concat(
|
|
...glyphs.map(g => 0 === s.indexOf(g) ? (
|
|
[dctTrans[g], s.substr(g.length)]
|
|
) : [])
|
|
);
|
|
return parse[0] + romanValue(parse[1]);
|
|
})() : 0;
|
|
|
|
// dctTrans :: {romanKey: Integer}
|
|
const dctTrans = {
|
|
M: 1E3,
|
|
CM: 900,
|
|
D: 500,
|
|
CD: 400,
|
|
C: 100,
|
|
XC: 90,
|
|
L: 50,
|
|
XL: 40,
|
|
X: 10,
|
|
IX: 9,
|
|
V: 5,
|
|
IV: 4,
|
|
I: 1
|
|
};
|
|
|
|
// glyphs :: [romanKey]
|
|
const glyphs = Object.keys(dctTrans);
|
|
|
|
// TEST -------------------------------------------------------------------
|
|
return ["MCMXC", "MDCLXVI", "MMVIII", "MMMM"].map(romanValue);
|
|
})();
|