1. PHP / Говнокод #3533

    +166

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    function gp($points){
      	if ($points > 10){
      	  $points = $points % 10;	
      	}
      	switch ($points) {
      		case 1: return "балл";
      		case 2: return "балла";
      		case 3: return "балла";
      		case 4: return "балла";
      		default: return "баллов";
      	}
      }

    жесть :)

    Запостил: antigovnokoder, 22 Июня 2010

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

    • Где-то уже было. Тут, конечно, не учтено несколько тонкостей.

      Например, тут получится 12 балла.
      Ответить
      • if ($points > 20) {
        будет немного лучше.
        Ответить
        • А если 112 или 914?
          Ответить
          • хм, я тоже об этом подумал, но воздержался от коментариев ибо обычно шкала больше 100 баллов не бывает, судя по всему на это и был расчет говнокодера
            КО: $points = $points % 100;
            Ответить
        • шли бы вы все читать I18n =)
          Ответить
    • gettext вам в помощь
      Ответить
    • Нашел:

      function counting($n,$w=array('','','')){
        $x=($xx=abs($n)%100)%10;
        return $n.' '.$w[($xx>10 AND $xx<15 OR !$x OR $x>4 AND $x<10)?2:($x==1?0:1)];
      }
      
      
      for($i=-5;$i<26;$i++)
        echo counting($i,array('сообщение','сообщения','сообщений')).'<br>';
      Ответить
      • > $w=array('','','')
        нах такое извращение в определении функции? И вообще зачем использовать массив, если число вариантов всегда одинаковое — 3
        Ответить
        • возможно, существуют языки, где таких словоформ или меньше или больше чем три (три, трех, тру, труЪ)
          Ответить
        • показать все, что скрытоWhy does one need that kind of perversion in a function signature? And in general, what's the purpose of using an array, if the number of choices is always the same — 2.
          Ответить

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