Advertisement
Guest User

Untitled

a guest
Sep 4th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. const THOUSANDS_SUFFIX = ["тысяча", "тысячи", "тысяч"];
  4. const HUNDERS = ["", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"];
  5. const TENS = ["", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"];
  6. const TEENS = ["десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"];
  7. const ONES = ["ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"];
  8.  
  9. const ONE_ONES = [""].concat(ONES.slice(1))
  10. const THOUSAND_ONES = ["", "одна", "две"].concat(ONES.slice(3));
  11.  
  12.  
  13. function calcSuffix(x, suffix=false) {
  14.     if (!suffix) {
  15.         return "";
  16.     }
  17.     else if (x % 100 >= 10 && x % 100 < 20) {
  18.         return suffix[2];
  19.     }
  20.     else if (x % 10 === 0) {
  21.         return suffix[2];
  22.     }
  23.     else if (x % 10 === 1) {
  24.         return suffix[0];
  25.     }
  26.     else if (x % 10 < 5) {
  27.         return suffix[1];
  28.     }
  29.     else {
  30.         return suffix[2];
  31.     }
  32. }
  33.  
  34. function foo(x, obj={}) {
  35.     const suffix = obj.suffix;
  36.     const ones = obj.ones || ONES;
  37.     const teens = obj.teens || TEENS;
  38.     const tens = obj.tens || TENS;
  39.     const hundreds = obj.hundreds || HUNDERS;
  40.  
  41.     let result;
  42.     if (x >= 10 && x < 20) {
  43.         result = teens[x - 10];
  44.     }
  45.     else {
  46.         let h = Math.floor(x / 100);
  47.         let t = Math.floor(x / 10) % 10;
  48.         let o = x % 10;
  49.  
  50.         h = hundreds[h];
  51.         t = tens[t];
  52.         o = ones[o];
  53.  
  54.         result = [h, t, o].filter(x => x !== "").join(" ");
  55.     }
  56.  
  57.     if (result === "") {
  58.         return "";
  59.     }
  60.     else if (!suffix) {
  61.         return result;
  62.     }
  63.     else {
  64.         return result + " " + calcSuffix(x, suffix);
  65.     }
  66. }
  67.  
  68. function parseIntToRu(x) {
  69.     if (x < 0 || x > 1000000) {
  70.         throw new Error(`parseIntToRu argumentError ${x}`);
  71.     }
  72.     else if (x < 10) {
  73.         return ONES[x];
  74.     }
  75.     else {
  76.         const t = foo(Math.floor(x / 1000), {ones: THOUSAND_ONES, suffix: THOUSANDS_SUFFIX});
  77.         const o = foo(x % 1000, {ones: ONE_ONES});
  78.  
  79.         return [t, o].filter(e => e !== "").join(" ");
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement