11function romanToInt ( s ) {
2- const romanNumerals = new Map ( [
2+ const map = new Map ( [
33 [ "I" , 1 ] ,
44 [ "V" , 5 ] ,
55 [ "X" , 10 ] ,
@@ -8,58 +8,40 @@ function romanToInt(s) {
88 [ "D" , 500 ] ,
99 [ "M" , 1000 ] ,
1010 ] ) ;
11- const romanNums = s . split ( "" ) ; //O(n)
1211 let count = 0 ;
13- let j = 0 ;
14-
15- for ( let i = 0 ; i < romanNums . length ; i ++ ) {
16- // Lookup time constant by map.
17- j ++ ;
18- if ( romanNumerals . get ( romanNums [ i ] ) < romanNumerals . get ( romanNums [ j ] ) ) {
19- let front = romanNumerals . get ( romanNums [ i + 1 ] ) ;
20- let back = romanNumerals . get ( romanNums [ i - 1 ] ) ;
21- let mid = romanNumerals . get ( romanNums [ i ] ) ;
22- let existentIndex = romanNums [ j ] ? romanNums [ j ] : romanNums [ j - 1 ] ;
23- let subSubstract =
24- romanNumerals . get ( existentIndex ) - romanNumerals . get ( romanNums [ i ] ) ;
25-
26- if ( back && front > mid ) {
27- let exponentPlus = back + front - mid ;
28- console . log ( exponentPlus ) ;
29- count = exponentPlus ;
30- } else {
31- count = count - subSubstract ;
32- }
33- } else if (
34- romanNumerals . get ( romanNums [ i ] ) > romanNumerals . get ( romanNums [ j ] )
35- ) {
36- let front = romanNumerals . get ( romanNums [ i + 1 ] ) ;
37- let back = romanNumerals . get ( romanNums [ i - 1 ] ) ;
38- let mid = romanNumerals . get ( romanNums [ i ] ) ;
39-
40- if (
41- romanNumerals . get ( romanNums [ j ] ) === romanNumerals . get ( romanNums [ j + 1 ] )
42- )
43- continue ;
44-
45- if ( back && front > mid ) {
46- let exponentPlus = back + front - mid ;
47- console . log ( exponentPlus ) ;
48- count = count = + exponentPlus ;
49- } else {
50- let existentIndex = romanNums [ j ] ? romanNums [ j ] : romanNums [ j - 1 ] ;
51- let subPlus =
52- romanNumerals . get ( romanNums [ i ] ) + romanNumerals . get ( existentIndex ) ;
53- count = count + subPlus ;
54- }
12+ for ( let i = 0 , j = i + 1 ; i < s . length ; i ++ , j ++ ) {
13+ if ( map . get ( s [ i ] ) === "I" && map . get ( s [ j ] ) === "V" ) {
14+ count += 4 ;
15+ i ++ ;
16+ } else if ( map . get ( s [ i ] ) === "I" && map . get ( s [ j ] ) === "X" ) {
17+ count += 9 ;
18+ i ++ ;
19+ } else if ( map . get ( s [ i ] ) === "X" && map . get ( s [ j ] ) === "L" ) {
20+ count += 40 ;
21+ i ++ ;
22+ } else if ( map . get ( s [ i ] ) === "X" && map . get ( s [ j ] ) === "C" ) {
23+ count += 90 ;
24+ i ++ ;
25+ } else if ( map . get ( s [ i ] ) === "C" && map . get ( s [ j ] ) === "D" ) {
26+ count += 400 ;
27+ i ++ ;
28+ } else if ( map . get ( s [ i ] ) === "C" && map . get ( s [ j ] ) === "M" ) {
29+ count += 900 ;
30+ i ++ ;
5531 } else {
56- count = count + romanNumerals . get ( romanNums [ i ] ) ;
32+ count += map . get ( s [ i ] ) ;
5733 }
5834 }
35+
5936 return count ;
6037}
6138
62- //console.log(romanToInt("XIX"));
63- //console.log(romanToInt("XV"));
39+ /*
40+
41+ Actually learned.
42+
43+ I forgot that strings are iterable, mapping was aplied successfuly, we can define rules to solve a problems
44+
45+ */
6446
6547module . exports = romanToInt ;
0 commit comments