JSFiddle - React, Tailwind, and code Playground

translate roman letters into digits using translation table

by Yurii Predborskyi

JavaScript

let nums = {
	'I':  1,
  'V':  5,
  'X':  10,
  'L':  50,
  'C':  100,
  'D':  500,
  'M':  1000
};


function translate(x) {
	let res = 0;
	if (x.length <= 0) {
  	return 0;
  }
	x = x.toUpperCase();
  for (let i = 0; i < x.length; i++) {
    log('res is ' + res + ', adding ' + x[i]);
    switch(x[i]) {
      case 'V':
      case 'X':
        if (i > 0 && x[i-1] === 'I') {
        	console.log('adding ', x[i], 'removing ', x[i-1]);          res += nums[x[i]];
          res -= nums[x[i-1]];
          res -= nums[x[i-1]];
        } else {
        	log('adding 10 as X');
        	res += nums[x[i]];
          log('new res is ' + res);
        }
        break;
      case 'L':
      case 'C':
      	if (i > 0 && x[i-1] === 'X') {
        	console.log('adding ', x[i], 'removing ', x[i-1]);
          res += nums[x[i]];
          res -= nums[x[i-1]];
          res -= nums[x[i-1]];
        } else {
        	res += nums[x[i]];
        }
        break;
      case 'D':
      case 'M':
      	if (i > 0 && x[i-1] === 'C') {
        	console.log('adding ', x[i], 'removing ', x[i-1]);
        	res += nums[x[i]];
          res -= nums[x[i-1]];
          res -= nums[x[i-1]];
        } else {
        	res += nums[x[i]];
        }
        break;
      default:
      	if (nums[x[i]]) {
        	res += nums[x[i]];
        }
    }
  }
	return res;
}

function log(text) {
	console.log(text);
}

console.log(translate('MCMXCIV'));