Last active
May 26, 2020 12:46
-
-
Save berkuteagle/6b01245d9b044d6fd13d3236cc6d02d5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const summ = { | |
| 'девятьсот': 900, | |
| 'восемьсот': 800, | |
| 'семьсот': 700, | |
| 'шестьсот': 600, | |
| 'пятьсот': 500, | |
| 'четыреста': 400, | |
| 'триста': 300, | |
| 'двести': 200, | |
| 'сто': 100, | |
| 'девяносто': 90, | |
| 'восемьдесят': 80, | |
| 'семьдесят': 70, | |
| 'шестьдесят': 60, | |
| 'пятьдесят': 50, | |
| 'сорок': 40, | |
| 'тридцать': 30, | |
| 'двадцать': 20, | |
| 'одиннадцать': 11, | |
| 'двенадцать': 12, | |
| 'тринадцать': 13, | |
| 'четырнадцать': 14, | |
| 'пятнадцать': 15, | |
| 'шестнадцать': 16, | |
| 'семнадцать': 17, | |
| 'восемнадцать': 18, | |
| 'девятнадцать': 19, | |
| 'один': 1, | |
| 'одна': 1, | |
| 'два': 2, | |
| 'две': 2, | |
| 'три': 3, | |
| 'четыре': 4, | |
| 'пять': 5, | |
| 'шесть': 6, | |
| 'семь': 7, | |
| 'восемь': 8, | |
| 'девять': 9, | |
| 'десять': 10 | |
| }; | |
| const multi = { | |
| 'тысяча': 1000, | |
| 'тысячи': 1000, | |
| 'тысяч': 1000, | |
| 'миллиона': 1000000, | |
| 'миллионов': 1000000, | |
| 'миллион': 1000000, | |
| 'миллиарда': 1000000000, | |
| 'миллиардов': 1000000000, | |
| 'миллиард': 1000000000 | |
| }; | |
| function getFirst(str, obj) { | |
| return Object.keys(obj).find((key) => str.indexOf(key) === 0); | |
| } | |
| function getSumm(str) { | |
| const first = getFirst(str, summ); | |
| if (first) { | |
| const s = getSumm(str.replace(first, '')); | |
| return [summ[first] + s[0], s[1]] | |
| } else { | |
| return [0, str]; | |
| } | |
| } | |
| function getMultiplier(str) { | |
| const first = getFirst(str, multi); | |
| if (first) { | |
| return [multi[first], str.replace(first, '')]; | |
| } else { | |
| return [1, str]; | |
| } | |
| } | |
| function getNumber(inputString) { | |
| let str = inputString.toLowerCase(); | |
| let result = 0; | |
| while(str) { | |
| const s = getSumm(str); | |
| const m = getMultiplier(s[1]); | |
| if (s[0] === 0 && m[0] === 1) { | |
| break; | |
| } | |
| result = result + s[0]*m[0]; | |
| str = m[1]; | |
| } | |
| return result; | |
| } | |
| const testStr = 'ОДИНМИЛЛИОНДВЕСТИОДНАТЫСЯЧАСТОДЕВЯНОСТОШЕСТЬ'; | |
| console.log(getNumber(testStr)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment