Skip to content

Instantly share code, notes, and snippets.

@dmi3y
Created June 18, 2016 06:10
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 dmi3y/d91a42e5059bf03bcf4ea9210f007ef1 to your computer and use it in GitHub Desktop.
Save dmi3y/d91a42e5059bf03bcf4ea9210f007ef1 to your computer and use it in GitHub Desktop.
function mapRomanToArabic (roman) {
switch(roman) {
case 'I':
return 1
case 'V':
return 5
case 'X':
return 10
case 'L':
return 50
case 'C':
return 100
case 'D':
return 500
case 'M':
return 1000
default:
return 0
}
}
function romanToArabic(str) {
let romanArr = str.split('')
let answer = 0
for (let i = 0; i < romanArr.length; i++) {
let curNum = mapRomanToArabic(romanArr[i])
let nextNum = mapRomanToArabic(romanArr[i + 1])
if (curNum >= nextNum) {
answer += curNum
} else {
answer -= curNum
}
}
return answer
}
/*
I = 1
V = 5
X = 10
L = 50
http://www.mathatube.com/images/roman-numerals.JPG
*/
function testCases() {
var tests = {
'I': 1, // 0, 1 =>
'IV': 4, // 0, 1, 5 =>
'IX': 9, // 0, 1, 10 =>
'VII': 7, // 0, 5, 1, 1 =>
'XIX': 19, // 0, 10, 1, 10 =>
'XXIV': 24, // 0, 10, 10, 1, 5 =>
'XLIV': 44, // 0, 10, 50, 1, 5 =>
'MMMCMXCIX': 3999
};
var keys = Object.keys(tests);
keys.forEach(function (k) {
var res = romanToArabic(k);
if (res === tests[k]) {
console.log(k + ' : Pass');
} else {
console.log(k + ' : Fail. Expected ' + tests[k] + ' but got ' + res );
}
});
}
testCases();
//
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment