Tradutor de números romanos usando JavaScript
Consegui fazer isso funcionar sem usar sublinhado, mas como um desafio extra, estou tentando converter algarismos romanos em números arábicos usando sublinhado. Abaixo está a minha tentativa. Funciona, exceto no caso do número "próximo" ser maior que o número "atual". Realmente não sei por que, mas quando verifico se (próximo> = num), se o bloco nem está sendo executado?
var DIGIT_VALUES = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};
var translateRomanNumeral = function(roman) {
// if it's not in the digit values object, return null
for (var i = 0; i < roman.length; i++) {
if (!(roman[i] in DIGIT_VALUES)) {
return null;
}
}
//with underscore:
var romanTranslated = reduce(roman, function(memo, letter, i) {
var prev = DIGIT_VALUES[roman[i - 1]];
var num = DIGIT_VALUES[letter];
var next = DIGIT_VALUES[roman[i + 1]];
if (next === undefined || next <= num) {
return memo + num;
}
Isso não está sendo executado por algum motivo:
if (next >= num) {
var diff = num - prev;
console.log(diff);
return memo + (diff - prev);
}
}, 0);
// grab the first one
//1
// console.log(num);
return romanTranslated;
};
console.log(translateRomanNumeral("LXIV")); //returns 66 ---> should return 64
console.log(translateRomanNumeral("CI")); //working --> returns 101
console.log(translateRomanNumeral("MMMMCCL")); // working ---> returns 4250.
//works!