Skip to content

Instantly share code, notes, and snippets.

@nikhilmetrani
Last active April 15, 2018 17:26
Show Gist options
  • Save nikhilmetrani/5d0d2b5baedf13282626d1f80141cccd to your computer and use it in GitHub Desktop.
Save nikhilmetrani/5d0d2b5baedf13282626d1f80141cccd to your computer and use it in GitHub Desktop.
Number <=> Roman
const converter = (() => {
const romanMap = [[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']];
const toRoman = num => {
let remainingNum = num;
return romanMap.reduce((roman, map) => {
while (remainingNum % map[0] < remainingNum) {
roman += map[1];
remainingNum -= map[0];
}
return roman;
}, '');
};
const fromRoman = str => {
let remainingStr = str;
return romanMap.reduce((num, map) => {
while (remainingStr.indexOf(map[1]) === 0) {
num += map[0];
remainingStr = remainingStr.replace(map[1], '');
}
return num;
}, 0);
}
return { toRoman, fromRoman};
})();
converter.toRoman(2018); // 'MMXVIII'
converter.fromRoman('MMXVIII'); // 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment