функция с математическими операциями над римскими цифрами

даны два числа в римском виде(например:'II + III') в строковом виде. знаки могут быть +,-,*,/.

у меня есть рабочая функция по сложению двух чисел в строковом виде:

const str2num = str => {
  let string = '';
  let operator = '';
  for (const symbol of str) {
    if (symbol === '+' || symbol === '-' || symbol === '*' || symbol === '/') {
      string += ' ';
      operator = symbol;
    } else {
      string += Number(symbol);
    }
  }


  const arr = string.split(' ');
  if (arr.includes('NaN')) {
    return 'Вы ввели неверный символ';
  }
  const [a, b] = arr;
  let result = 0;
  switch (operator) {
    case '+':
      result = Number(a) + Number(b);
      break;
    case '-':
      result = Number(a) - Number(b);
      break;
    case '*':
      result = Number(a) * Number(b);
      break;
    case '/':
      result = Number(a) / Number(b);
      break;
  }
  return Math.round(result);
}

также, есть рабочая функция по переводу римского числа в арабское(например II = 2 или IV = 4)

function solution(str){
    roman = str.split('');
    let lookup = {
      X:10,
      IX:9,
      V:5,
      IV:4,
      I:1
    };
    for(let key in lookup){
      for(let i = 0; i < roman.length;i++){
        if(roman[0] == 'I' && roman[1] == 'V'){
          roman = [4];
        } else if(roman[i] == key){
          roman[i] = lookup[key];
        } else if (roman[0] == 'I' && roman[1] == 'X'){
          roman = [9];
        } else{
          continue;
        }
      }
    }
    return roman.reduce((elem,elem2)=>elem+elem2,0)
  }

никак не могу написать функцию по проведению математических операций в строковом виде для римских цифр, вот функция которую я написал, но она не рабочая..

  const rom2num = str => {
    
    let string = '';
    let operator = '';
    for (const symbol of str) {
      if (symbol === '+' || symbol === '-' || symbol === '*' || symbol === '/') {
        string += ' ';
        operator = symbol;
      } else { 
        string += symbol;
      }
    }

  
  
  
    const arr = string.split(' ');
      if (arr.includes('NaN')){
        return 'Вы ввели неверный символ';
      } 
    
    
    const [a, b] = arr;
    let result = 0;
    switch (operator) {
      case '+':
        result = solution(a) + solution(b);
        break;
      case '-':
        result = solution(a) - solution(b);
        break;
      case '*':
        result = solution(a) * solution(b);
        break;
      case '/':
        result = solution(a) / solution(b);
        break;
    }
    return Math.round(result);
  }

console.log(rom2num('II + III'))

прошу помочь, только без регулярных выражений, я их еще не изучал, заранее - большое спасибо!!


Ответы (0 шт):