Skip to content

Instantly share code, notes, and snippets.

@berkuteagle
Last active May 26, 2020 12:46
Show Gist options
  • Select an option

  • Save berkuteagle/6b01245d9b044d6fd13d3236cc6d02d5 to your computer and use it in GitHub Desktop.

Select an option

Save berkuteagle/6b01245d9b044d6fd13d3236cc6d02d5 to your computer and use it in GitHub Desktop.
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