-
Notifications
You must be signed in to change notification settings - Fork 4
/
romanNumeralsEncoder.js
36 lines (34 loc) · 1.35 KB
/
romanNumeralsEncoder.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/**
* @file: romanNumeralsEncoder.js
*
* Description:
*
* Create a function taking a positive integer as its parameter
* and returning a string containing the Roman Numeral representation of that integer.
*
* Modern Roman numerals are written by expressing each digit separately starting with the left most digit and skipping any digit with a value of zero. In Roman numerals 1990 is rendered: 1000=M, 900=CM, 90=XC; resulting in MCMXC. 2008 is written as 2000=MM, 8=VIII; or MMVIII. 1666 uses each Roman symbol in descending order: MDCLXVI.
*
* Example:
*
* solution(1000); // should return 'M'
* Help:
*
* Symbol Value
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1,000
* Remember that there can't be more than 3 identical symbols in a row.
*
* More about roman numerals - http://en.wikipedia.org/wiki/Roman_numerals
*/
function solution(num) {
const encodeArray = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']
, digitsArray = Array.from(num.toString())
let right = [2,1,0].reduce((r, k) => (encodeArray[+digitsArray.pop() + (10*k)] || '') + r ,'')
, left = Array(+digitsArray.join('') + 1).join('M')
return left + right
}