Skip to content

Instantly share code, notes, and snippets.

@datchley
Created December 8, 2015 05:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save datchley/b0d1def0b8992327a4b9 to your computer and use it in GitHub Desktop.
Save datchley/b0d1def0b8992327a4b9 to your computer and use it in GitHub Desktop.
Conversions for Integers <-> Roman Numerals
function int2roman(n) {
var map = [
{ factor: 1000, letter: 'M' },
{ factor: 900, letter: 'CM' },
{ factor: 500, letter: 'D' },
{ factor: 400, letter: 'CD' },
{ factor: 100, letter: 'C' },
{ factor: 90, letter: 'XC' },
{ factor: 50, letter: 'L' },
{ factor: 40, letter: 'XL' },
{ factor: 10, letter: 'X' },
{ factor: 9, letter: 'IX' },
{ factor: 5, letter: 'V' },
{ factor: 4, letter: 'IV' },
{ factor: 1, letter: 'I' },
];
return map.reduce(function(roman, m) {
var rem = parseInt(n / m.factor);
if (rem >= 1) {
roman += Array(rem+1).join(m.letter);
n = parseInt(n % m.factor);
}
return roman;
}, '');
}
function roman2int(r) {
var map = {
'I': 1,
'IV': 4,
'V': 5,
'IX': 9,
'X': 10,
'XL': 40,
'L': 50,
'XC': 90,
'C': 100,
'CD': 400,
'D': 500,
'CM': 900,
'M': 1000
},
sum = 0,
letters = r.toUpperCase().split('');
for (var i=0, l=letters.length; i<l; i++) {
var key2 = letters[i] + letters[i+1],
key = letters[i];
if (map[key2]) {
sum += map[key2];
i += 1;
}
else {
sum += map[key];
}
}
return sum;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment