Untitled

Untitled

TEST#1

class RomanNumerals {
  
  static initMap() {
    let _romanLetter = new Map();
    _romanLetter.set("I", {value: "1", power: 0});
    _romanLetter.set("IV", {value: "4", power: 0});
    _romanLetter.set("V", {value: "5", power: 0});
    _romanLetter.set("X", {value: "1", power: 1});
    _romanLetter.set("XL", {value: "4", power: 1});
    _romanLetter.set("L", {value: "5", power: 1});
    _romanLetter.set("C", {value: "1", power: 2});
    _romanLetter.set("CD", {value: "4", power: 2});
    _romanLetter.set("D", {value: "5", power: 2});
    _romanLetter.set("M", {value: "1", power: 3});
    return _romanLetter;
  }
  
  static toRoman(number) {
    const map = this.initMap();
    let result = "";
    let indexCheck = [];
    [...map.entries()].forEach((_corr, _index) => {
      number.toString().split("").reverse().forEach((element, index) => {
        let word = "";
        if(element != 0 && index == _corr[1].power && !indexCheck.includes(index)) {
          if(element == 9) {
            const first = [...map.entries()].find((tab) => tab[1].power == index)[0]
            const second = [...map.entries()].find((tab) => tab[1].power == index+1)[0]
            word = first + second;
            result = word + result;
            indexCheck.push(index)
          }
          if(element == _corr[1].value) {
            word = _corr[0];
            result = word + result;
            indexCheck.push(index);
          }
          if(element > 1 && element < 4) {
            word = _corr[0].repeat(element);
            result = word + result;
            indexCheck.push(index);
          }
          if(element > 5 && element < 9) {
            const first = [...map.entries()].find((tab) => tab[1].power == index && tab[1].value == 5)[0];
            const second = _corr[0].repeat(element-5);
            word = first + second;
            result = word + result;
            indexCheck.push(index);
          }
        }
      })
    })
    
    return result;
  }
  
  static fromRoman(string) {
  }
}

TEST#2 [REUSSI]

class RomanNumerals {
  
  static initMap() {
    let _romanLetter = new Map();
    _romanLetter.set("M", {value: 1000});
    _romanLetter.set("CM", {value: 900});
    _romanLetter.set("D", {value: 500});
    _romanLetter.set("CD", {value: 400});
    _romanLetter.set("C", {value: 100});
    _romanLetter.set("XC", {value: 90});
    _romanLetter.set("L", {value: 50});
    _romanLetter.set("XL", {value: 40});
    _romanLetter.set("X", {value: 10});
    _romanLetter.set("IX", {value: 9});
    _romanLetter.set("V", {value: 5});
    _romanLetter.set("IV", {value: 4});
    _romanLetter.set("I", {value: 1});
    
    return _romanLetter;
  }
  
  static toRoman(number) {
    const arrayCorres = this.initMap();
    let result = "";
    [...arrayCorres.entries()].forEach((_corr) => {
      let quotient = Math.floor(number /_corr[1].value);
      number -= _corr[1].value * quotient;
      result += _corr[0].repeat(quotient);
    })
    
    return result;
  }
  
  static fromRoman(string) {
    const arrayCorres = this.initMap();
    let result = 0;
    const arrayOfLetter = string.split("");
    
    for(let i = 0; i < arrayOfLetter.length; i++) {
      if(i < arrayOfLetter.length - 1) {
        if(arrayCorres.get(arrayOfLetter[i]).value >= arrayCorres.get(string.split("")[i+1]).value) {
          result += arrayCorres.get(arrayOfLetter[i]).value;
        } else {
          result += arrayCorres.get(arrayOfLetter[i+1]).value - (arrayCorres.get(arrayOfLetter[i]).value)
          i++;
        }
      } else {
        result += arrayCorres.get(arrayOfLetter[i]).value;
      }
    }
    
    return result;
  }
}