"PHP" / Говнокод #17360 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
require_once 'number.php';
class numberspelling extends number {
    //put your code here
    private $spelling=array(
        'nought'=>array(
            'eng'=>'nought',
            'ukr'=>'нуль',
            'rus'=>'ноль'
        ),
        'ones'=>array(
            'eng'=>array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"),
            'ukr'=>array("", "один", "два", "три", "чотири", "п`ять", "шість", "сім", "вісім", "дев`ять"),
            'rus'=>array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
            ),
        'teens'=>array(
            'eng'=>array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"),
            'ukr'=>array("десять", "одинадцять", "дванадцять", "тринадцять", "чотирнадцять", "п`ятнадцять", "шістнадцять", "сімнадцять", "вісімнадцять", "дев`ятнадцять"),
            'rus'=>array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
        ),
        'ties'=>array(
            'eng'=>array("", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"),
            'ukr'=>array("", "десять", "двадцять", "тридцять", "сорок", "п`ятдесят", "шістдесят", "сімдесят", "вісімдесят", "дев`яносто"),
            'rus'=>array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семдесят", "восемдесят", "девяносто")
        ),
        'hundreds'=>array(
            'eng'=>array("", "hundred", "two hundred", "three hundred", "four hundred", "five hundred", "six hundred", "seven hundred", "eight hundred", "nine hundred"),
            'ukr'=>array("", "сто", "двісті", "триста", "чотириста", "п`ятсот", "шістсот", "сімсот", "вісімсот", "дев`ятсот"),
            'rus'=>array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
        )
    );
    private $greatnumbersspelling=array(
        'thousands'=>array(
            'eng'=>array("", "one thousand", "two thousand", "three thousand", "four thousand", "thousand"),
            'ukr'=>array("", "одна тисяча", "дві тисячі", "три тисячі", "чотири тисячі", "тисяч"),
            'rus'=>array("", "одна тысяча", "две тысячи", "три тысячи", "четыре тысячи", "тысяч")
        ),
        'millions'=>array(
            'eng'=>array("", "one million", "two million", "three million", "four million", "million"),
            'ukr'=>array("", "один мільйон", "два мільйони", "три мільйони", "чотири мільйони", "мільйонів"),
            'rus'=>array("", "один миллион", "два миллиона", "три миллиона", "четыре миллиона", "миллионов")
        )
    );
    private $signspelling=array(
        'negative'=>array(
            'eng'=>'minus',
            'ukr'=>'мінус',
            'rus'=>'минус'
        ),
        'positive'=>array(//для удобства изменения кода при необходимости
            'eng'=>'',
            'ukr'=>'',
            'rus'=>''
        )
    );
    private $language;
    public function __construct($number, $language) {
        parent::__construct($number);
        $this->language=$language;
    }
    public function spell() {
        //spelling
        $result="";
        if($this->sign==-1) 
            $result=$result.
                $this->signspelling['negative'][$this->language]." ";
        else $result.=$this->signspelling['positive'][$this->language]." ";
        if(isset($this->digits[6])) {//разряд миллионов
            for($i=1; $i<5; $i++) {
                if($this->digits[6]==$i) {
                    $result.=$this->greatnumbersspelling['millions'][$this->language][$i]." ";
                }
            }
            if($this->digits[6]>=5) {
                $result.=$this->spelling['ones'][$this->language][$this->digits[6]]." ".$this->greatnumbersspelling['millions'][$this->language][5]." ";
            }
        }
        if(isset($this->digits[5])) {//разряд сотен тысяч
            $result.=$this->spelling['hundreds'][$this->language][$this->digits[5]]." ";
            if(($this->digits[5]!=0)&($this->digits[4]==0)&($this->digits[3]==0)) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
        }
        if(isset($this->digits[4])) {//разряд десятков тысяч
            if($this->digits[4]>1) {
                $result.=$this->spelling['ties'][$this->language][$this->digits[4]]." ";
                if($this->digits[3]==0) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
            }
            if($this->digits[4]==1) $result.=$this->spelling['teens'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";    
        }
        if(isset($this->digits[3])) {//разряд тысяч
            for($i=1; $i<5; $i++) {
                if($this->digits[3]==$i) {
                    if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1)) $result.=$this->greatnumbersspelling['thousands'][$this->language][$i]." ";
                }
            }
            if($this->digits[3]>=5) {
                if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1))
                    $result.=$this->spelling['ones'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";
            }
        }
        if(isset($this->digits[2])) {//разряд сотен
            $result.=$this->spelling['hundreds'][$this->language][$this->digits[2]]." ";

Часть программы, которая преобразовывает целое число из промежутка [-9999999; 9999999] в текст (разговорный) на трех языках (Russian, Ukrainian, English). Состоит из трех классов. Это класс numberspelling - основной класс программы. Точнее его часть. Остальное - в следующем посте. Именно он преобразует цифру из уже имеющегося массива number в массив в произношение этой цифры на данном языке, в соответствии с её весом (той степенью числа 10, на которую она умножена). Например, если цифра 5 в уже имеющемся массиве стоит под номером 2, то она будет произносится "пятьсот". Напомню, номер элемента в массиве соответствует степени числа 10, на которую надо умножить элемент.

Запостил: ppd ppd, (Updated )

Комментарии (8) RSS

  • В качестве наказания заставить перевести еще и на французский и немецкий
    Ответить
    • ... и для всех падежей. Хотя в этом случае лучше сразу переводить на эстонский: там падежей аж 14 штук.
      Ответить
        • А вообще в тюркских и в финно-угорских языках падеж не имеет такого смысла, как в индоевропейских. Поскольку у угро-тюрков отсутствуют предлоги, вместо них они к слову цепляют суффиксы, причём к одному слову могут прицепить их произвольное количество.

          Например, в татарском «китапларымда» = «в моих книгах» ( -лар = множественное число, -ым = принадлежность, -да = место).

          Или в удмуртском: «бригадирмылэнъёсызлэнъёсызлы» = «для тех, которые у тех, кто у нашего бригадира».

          Но полная кошмарная жуть тут: https://clck.ru/9PW7r

          В общем, в естественных языках можно насочинять столько форм, что даже ифкуиль позавидует.
          Ответить
          • Выглядит как (-(-(1 + (-(-(((-(-(-(sqrt(1 + pow(-(-(1 + 1)), 2)))))) + 6) * 0)))))).
            Кто-нибудь в реальных разговорах генерирует динамически такие довольно противоречивые наслоения?

            Помню, была какая-то задача про русский язык из серии "что сказал автор, пока курил", там было что-то вроде "министр отменил мораторий за запрет несоблюдения закона о непринятии отрицания мер протеста против уменьшения объёмов агентств по предупреждению конфликтов из-за отключения горячей воды".

            P.S. Для ГК удобно. "Я, %username%, утверждаю, что в коде нет C++ и подтверждаю свой статус олдфага неразрывным написанием слова megszentségteleníthetetlenségeskedéseitekért."
            Ответить
        • Блин, да это же лингвистический хаскель — хотели покороче, а получилось как всегда.
          Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8