Advertisement
Todorov_Stanimir

fromRoman

Jun 15th, 2020
810
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const mapper = {
  2.   '': 0,
  3.   'I': 1,
  4.   'II': 2,
  5.   'III': 3,
  6.   'IV': 4,
  7.   'V': 5,
  8.   'VI': 6,
  9.   'VII': 7,
  10.   'VIII': 8,
  11.   "IX": 9,
  12.   'X': 10,
  13.   'XX': 20,
  14.   'XXX': 30,
  15.   'XL': 40,
  16.   'L': 50,
  17.   'LX': 60,
  18.   'LXX': 70,
  19.   'LXXX': 80,
  20.   'XC': 90,
  21.   'C': 100,
  22.   'CC': 200,
  23.   'CCC': 300,
  24.   'CD': 400,
  25.   'D': 500,
  26.   'DC': 600,
  27.   'DCC': 700,
  28.   'DCCC': 800,
  29.   'CM': 900,
  30.   'M': 1000,
  31.   'MM': 2000,
  32.   'MMM': 3000
  33. }
  34.  
  35. const fromRoman = (roman) => {
  36.   const pattern = /^(MMM|MM|M)*(C|CC|CCC|CD|D|DC|DCC|DCCC|CM)?(X|XX|XXX|XL|L|LX|LXX|LXXX|XC)?(I|II|III|IV|V|VI|VII|VIII|IX)?$/gi;
  37.  
  38.   const arrayOfRoman = pattern.exec(roman);
  39.   const [_, hilyadni, stotici, desetici, edinici] = [...arrayOfRoman]
  40.  
  41.   return [hilyadni, stotici, desetici, edinici].map(el => el ? el : '').reduce((result, el) => result += mapper[el], 0)
  42. }
  43.  
  44.  
  45. console.log(fromRoman('M'));
  46. console.log(fromRoman('CMXCIX'));
  47. console.log(fromRoman('IV'));
  48. console.log(fromRoman('I'));
  49. console.log(fromRoman('MCMXCI'));
  50. console.log(fromRoman('MMVI'));
  51. console.log(fromRoman('MMXX'));
  52.  
  53. console.log(fromRoman('XXI'));
  54. console.log(fromRoman('I'));
  55. console.log(fromRoman("III"));
  56. console.log(fromRoman('IV'));
  57. console.log(fromRoman('MMVII'));
  58. console.log(fromRoman('MDCLXIX'));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement