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

    +200

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    $y = date("Y");
    $date = date("H:i");
    
       echo '<h3>Московское время: <span style="color:silver">';
       if ($date == "06:00") echo "Шесть часов ноль минут";
       if ($date == "06:01") echo "Шесть часов одна минута";
       if ($date == "06:02") echo "Шесть часов две минуты";
       if ($date == "06:03") echo "Шесть часов три минуты";
       if ($date == "06:04") echo "Шесть часов четыре минуты";
       if ($date == "06:05") echo "Шесть часов пять минут";
       if ($date == "06:06") echo "Шесть часов шесть минут";
       if ($date == "06:07") echo "Шесть часов семь минут";
       if ($date == "06:08") echo "Шесть часов восемь минут";
       if ($date == "06:09") echo "Шесть часов девять минут";
       if ($date == "06:10") echo "Шесть часов десять минут";
       if ($date == "06:11") echo "Шесть часов одиннадцать минут";
       if ($date == "06:12") echo "Шесть часов двенадцать минут";
       if ($date == "06:13") echo "Шесть часов тринадцать минут";
       if ($date == "06:14") echo "Шесть часов четырнадцать минут";
       if ($date == "06:15") echo "Шесть часов пятнадцать минут";
    
    /*  Здесь пропускаем около 800 строк подобного кода*/
    
       if ($date == "17:57") echo "Семьнадцать часов пятьдесят семь минут";
       if ($date == "17:58") echo "Семьнадцать часов пятьдесят восемь минут";
       if ($date == "17:59") echo "Семьнадцать часов пятьдесят девять минут";
       if ($date == "18:00") echo "Восемьнадцать часов ноль минут";
       if ($date == "18:01") echo "Восемьнадцать часов одна минута";
       if ($date == "18:02") echo "Восемьнадцать часов две минуты";
       if ($date == "18:03") echo "Восемьнадцать часов три минуты";
       if ($date == "18:04") echo "Восемьнадцать часов четыре минуты";
    
    /*  Пропустим еще около 600 строк... Кажется закончилось... Хорошо, что в сутках только 24 часа по 60 минут в каждом. */ 
    
       if ($date == "05:58") echo "Пять часов пятьдесят восемь минут";
       if ($date == "05:59") echo "Пять часов пятьдесят девять минут";
       echo "</span></h3>";
    
    /* Но ведь есть еще года....  */
      echo '<h3>На дворе: <span style="color:silver">';
       if ($y == "2011") echo "Две тысячи одиннадцатый год";
       if ($y == "2012") echo "Две тысячи двенадцатый год";
       if ($y == "2013") echo "Две тысячи тринадцатый год";
       if ($y == "2014") echo "Две тысячи четырнадцатый год";
       if ($y == "2015") echo "Две тысячи пятнадцатый год";
       if ($y == "2016") echo "Две тысячи шестнадцатый год";
       if ($y == "2017") echo "Две тысячи семнадцатый год";
       if ($y == "2018") echo "Две тысячи восемнадцатый год";
       if ($y == "2019") echo "Две тысячи девятнадцатый год";
       if ($y == "2020") echo "Две тысячи двадцатый год";
       if ($y == "2021") echo "Две тысячи двадцать первый год";
    
    /* Подрежем немного шедевр. Похоже планируется поддержка данного ПО аж до середины века */
    
       if ($y == "2053") echo "Две тысячи пятдесят третий год";
       if ($y == "2054") echo "Две тысячи пятдесят четвертый год";
       if ($y == "2055") echo "Две тысячи пятдесят пятый год";
       echo '</span></h3>';

    Данный шедевр алгоритмизации имеет в оригинале около 5000 строк. Я его сильно сократил, но смысл не изменился. Комментарии в коде мои, в оригинале естественно никаких комментариев нет.

    Запостил: RussianSpy, 27 Октября 2011

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

    • Жаль без секунд.
      Ответить
    • а теперь с датами и вручную
      Ответить
    • Зато какое пространнство для рефракторинга
      Ответить
      • Скорее для реfuckинга, если уж на то пошло.
        Удалить нахрен.
        Ответить
    • 24*60 = 1440 строк. Полсотни на года. 366 на число и месяц (хоть они и пропущены).

      Где ещё 3000 строк?!
      Ответить
      • строка вида
        if ($y == "2011") echo "Две тысячи одиннадцатый год";

        в оригинале выглядела примерно так
        if ($y == "2011") {
                                          echo "Две тысячи одиннадцатый год";
        }

        Плюс там еще код связанный с говноверсткой, обработка дат занимает около 50 строк, еще здоровенный кусман посвящен работе с месяцами, ну и конечно замеры времени выполнения - как же без них-то...
        if ($d=="01") {
        echo "Первое";
        }
        if ($d=="1") {
        echo "Первое";
        }
        if ($d=="02") {
        echo "Второе";
        }
        if ($d=="2") {
        echo "Второе";
        }
        /* много строк */
        
        if ($m=="02") {
        echo "Февраля";
        }
        if ($m=="2") {
        echo "Февраля";
        }
        if ($m=="03") {
        echo "Марта";
        }
        if ($m=="3") {
        echo "Марта";
        }
        Ответить
    • Да, и граммар-наци отчаянно негодует! "пятдесят"? "восемьнадцать"?

      Хотя, чего ещё ждать от такого кодера
      Ответить
    • MAXIMUM INDUS
      Ответить
    • Не знаю пыха, поэтому вопрос - как сделать иначе?
      Ответить
      • Попал ты, паря
        Ответить
      • убить себя нахуй
        Ответить
        • PHP-программист во мне сдох не родившись, так что условие выполнено. Что дальше делать?
          Ответить
      • Автор?
        Ответить
      • да, действительно. каким образом эта фишка реализуется у топкодера? потому что действительно может быть такой запрос заказчика )
        Ответить
        • навскидку: создать массив [единицы, десятки...]
          Ответить
        • Например, так:
          function parse($number, $titles)  
          {  
              $cases = array(2, 0, 1, 1, 1, 2);  
              return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[($number%10<5)?$number%10:5] ];  
          }  
          
          $hrs = array('час', 'часа', 'часов');
          $mins = array('минута', 'минуты', 'минут');
          for ($h=0;$h<24;$h++)
          {
          for ($m=0;$m<60;$m++)
          {
          echo parse($h, $hrs) . ", " . parse($m, $mins) . "\n";
          }
          }
          Ответить
          • тем же методом и цифры
            Ответить
          • [just for fun]
            (define (literal hour min) (format #f "~R hour~P ~R minute~P" hour hour min min))
            (literal 9 51)
            $30 = "nine hours fifty-one minutes"

            правда говнобритосский
            Ответить
            • А если еще найти готовую либу то вообще мир перевернется)
              Есть же терпеливые люди на свете...
              Ответить
        • Write code that generates the above code!
          Ответить
      • сцепить части строк.
        Ответить
    • Хотелось бы увидеть код данного человека по переходу на Зимнее/Летнее время ))) (Даже если date() хватает время сервера :D )
      Я теперь понял почему его все таки отменили =)))
      Ответить
    • $timestamp = time();
      // ну шо? Поехали....
      if ($timestamp == '1319815513') {
          ...

      Хотя, я думаю ЭТОТ справился бы.
      Ответить
      • Это просто божественно! Эмоции хлещут через край.
        Ответить
    • Может он просто сгенерил это)
      Ответить
      • Ага, только при написании генератора для этого кода надо решать точно такую же задачу, как и при написании самого кода.
        Ответить

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