Skip to content

Instantly share code, notes, and snippets.

@lovasoa
Last active February 26, 2016 19:01
Show Gist options
  • Save lovasoa/bf5d380089bddd6684aa to your computer and use it in GitHub Desktop.
Save lovasoa/bf5d380089bddd6684aa to your computer and use it in GitHub Desktop.
Write a number in roman numerals efficiently in javascript
function fromRoman(str) {
// Parse str as a roman numeral
var values = {I:1, V:5, X:10, L:50, C:100, D:500, M:1000};
str = str.toUpperCase();
var n = 0, v1 = 0, v2 = values[str[0]];
for (var k = 0; k < str.length; k++) {
var v1 = v2, v2 = k+1 < str.length ? values[str[k+1]] : 0;
n += (v2 > v1) ? -v1 : v1;
}
return n;
}
function toRoman (n, lowercase) {
var letters = lowercase ? "mdclxvi" : "MDCLXVI";
var k = 1000, l=0, r=[], letter, prevletter;
while(n > 0) {
prevletter = letter;
letter = letters[l];
if(n>=k) {
var len = n/k;
r.push(letter);
if (len >= 4 && l > 0) r.push(prevletter);
else for(var i=2; i<=len; i++) r.push(letter);
n %= k;
}
l++;
k /= (l%2) ? 2 : 5;
}
return r.join('');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment