Convert decimal number to Roman numeral
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const NUMERALS = { | |
I: 1, | |
V: 5, | |
X: 10, | |
L: 50, | |
C: 100, | |
D: 500, | |
M: 1000, | |
IV: 4, | |
IX: 9, | |
XL: 40, | |
XC: 90, | |
CD: 100, | |
CM: 900, | |
}; | |
const romanToDecimal = (numerals) => { | |
// validate here | |
let value = 0; | |
// loop through the roman numeral string | |
for (let i = 0; i < numerals.length; i += 1) { | |
// create a combo numeral with this index and it's | |
// next sibling | |
let combo = `${numerals[i]}${numerals[i + 1]}`; | |
// check to see if the combo has a value | |
if (NUMERALS[combo]) { | |
// if it does, add to the total value, and increment the | |
// loop by an extra 1, so that the next sibling doesn't | |
// get counted again | |
value += NUMERALS[combo]; | |
i += 1; | |
continue; | |
} | |
// combo didn't have a value, so let's just try the single numeral | |
if (NUMERALS[numerals[i]]) { | |
value += NUMERALS[numerals[i]]; | |
continue; | |
} else { | |
// hmm, combo and single numeral did not have an associated | |
// decimal value, so let's set `value` to false and break out | |
// of the loop, cause this looks to be an invalid roman numeral | |
value = false; | |
break; | |
} | |
} | |
return value; | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment