1. Лучший говнокод

    В номинации:
    За время:
  2. JavaScript / Говнокод #13265

    +157

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    function timeToString(year, month, day, hour, minute, sec, msec) {
    		var date = new Date(year, month, day, hour, minute, sec, msec);
    		var now = new Date();
    		var msec = now.getTime() - date.getTime(); // Миллисекунды
    		var sec = Math.round(msec / 1000);
    		var years = Math.floor(sec / (86400 * 365));
    		var days = Math.floor((sec - years * 86400 * 365) / 86400);
    		var hours = Math.floor((sec - years * 86400 * 365 - days * 86400) / 3600);
    		var minutes = Math.floor((sec - years * 86400 * 365 - days * 86400 - hours * 3600) / 60);
    		var seconds = sec - years * 86400 * 365 - days * 86400 - hours * 3600 - minutes * 60;	
    		// Проверяем, были ли високосные года?
    		var i;
    		for(i = date.getFullYear(); i <= now.getFullYear(); i++) {
    				if(i % 4 === 0) {
    						if(i === now.getFullYear()) {
    								if(now.getMonth > 2) {
    										days++;
    								}
    								elseif(now.getMonth === 2) {
    										if(now.getDay === 28) {
    												days++;
    										}
    								}
    						}
    						else
    							{
    								days++;
    							}
    		}
    		var yearName;
    		var yearOst = years % 10;
    		if(years === 1 || (yearOst === 1 && years > 20))
    			{
    				yearName = 'год'
    			}
    		else if((years === 2 || years === 3 || years === 4) || ((yearOst === 2 || yearOst === 3 || yearOst === 4) && years > 20))
    			{
    				yearName = 'года';
    			}
    		else
    			{
    				yearName = 'лет';
    			}
    		var hourName;
    		var hourOst = hours % 10;
    		if(hours === 1 || (hourOst === 1 && hours > 20))
    			{
    				hourName = 'час'
    			}
    		else if((hours === 2 || hours === 3 || hours === 4) || ((hourOst === 2 || hourOst === 3 || hourOst === 4) && hours > 20))
    			{
    				hourName = 'часа';
    			}
    		else
    			{
    				hourName = 'часов';
    			}
    		var dayName;
    		var dayOst = days % 10;
    		if(days === 1 || (dayOst === 1 && days > 20))
    			{
    				dayName = 'день'
    			}
    		else if((days === 2 || days === 3 || days === 4) || ((dayOst === 2 || dayOst === 3 || dayOst === 4) && days > 20))
    			{
    				dayName = 'дня';
    			}
    		else
    			{
    				dayName = 'дней';
    			}
    		var minuteName;
    		var minuteOst = minutes % 10;
    		if(minutes === 1 || (minuteOst === 1 && minutes > 20))
    			{
    				minuteName = 'минута'
    			}
    		else if((minutes === 2 || minutes === 3 || minutes === 4) || ((minuteOst === 2 || minuteOst === 3 || minuteOst === 4) && minutes > 20))
    			{
    				minuteName = 'минуты';
    			}
    		else
    			{
    				minuteName = 'минут';
    			}
    		var secondName;
    		var secondOst = seconds % 10;
    		if(seconds === 1 || (secondOst === 1 && seconds > 20))
    			{
    				secondName = 'секунда'
    			}
    		else if((seconds === 2 || seconds === 3 || seconds === 4) || ((secondOst === 2 || secondOst === 3 || secondOst === 4) && seconds > 20))
    			{
    				secondName = 'секунды';
    			}
    		else {
    				secondName = 'секунд';
    			}
    		document.getElementById("time").innerHTML = years + " " + yearName + ", " + days + " " + dayName + ", " + hours + " " + hourName + ", " + minutes + " " + minuteName + ", " + seconds + " " + secondName;
    	}

    Функция для подсчета того, сколько времени прошло с указанной даты.
    JavaScript начал изучать вчера. Чувствую, что уже можно заканчивать.
    Пришлось код урезать, чтобы вместиться в 100 строк. Более-менее читаемый тут: http://dumpz.org/573381/

    3Jlou_OguHo4ka, 30 Июня 2013

    Комментарии (150)
  3. C++ / Говнокод #12071

    +18

    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
    #include <iostream>
     
    int main() {
        // Инициализируй меня... полностью.
        void (*(&(*omg[])())[1]) (void (*)(void (*(*[])())())) = { [] () ->
        void (*(&)[1]) (void (*)(void (*(*[])())())) { static void (*f[])
        (void (*)(void (*(*[])())())) = { [] (void (*f)(void (*(*[])())())) {
        static void (*(*ff[])())() = { [] () -> void (*)() { return [] () {
        std::cout << "Test OK" << std::endl; }; } }; f(ff); } }; return f; } };
     
        // Вызывай, вызывай меня... полностью.
        omg[0]()[0]([] (void (*(*f[])())()) { f[0]()(); });
     
        return 0;
    }

    http://ideone.com/gvg1B7

    Говнокоду http://govnokod.ru/12066 посвящается.

    Инициализация массива указателей на функции, возвращающих ссылку на массив указателей на функции принимающие указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию ничего не принимающую и ничего не возвращающую.

    С++ это простой и наглядный язык.

    bormand, 07 Ноября 2012

    Комментарии (150)
  4. Pascal / Говнокод #7783

    +101

    1. 1
    2. 2
    3. 3
    i := -7; // если после этой строчки загнать в отладчик i shr 1, то отладчик покажет -4
    i := i shr 1; // после этой строчки i становится равно 2147483644
    i := (-7) shr 1; // после этой строчки i становится равно 4

    Delphi7 такой Delphi7...

    http://www.gamedev.ru/code/forum/?id=138759&page=25#m367
    Тарас любит дельфи.

    CPPGovno, 06 Сентября 2011

    Комментарии (150)
  5. Си / Говнокод #27797

    +1

    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
    #include <stdio.h>
    
    #define new(class) _##class##_##new
    #define impl(class, method) _##class##_##method
    struct Calculate
    {
    	int(*getOne)(struct Calculate*);
    };
    
    int impl(Calculate, getOne)(struct Calculate* this) { return 1; }
    void* new(Calculate)(void)
    {
    	struct Calculate* class = malloc(sizeof(struct Calculate));
    	class->getOne = impl(Calculate, getOne);
    	return class;
    }
    
    struct CalculateProxy
    {
    	struct Calculate;
    };
    
    int impl(CalculateProxy, getOne)(struct Calculate* this)
    {
    	printf("Method call!\n");
    	return impl(Calculate, getOne)(this);
    }
    
    void* new(CalculateProxy)(void)
    {
    	struct CalculateProxy* class = malloc(sizeof(struct CalculateProxy));
    	class->getOne = impl(CalculateProxy, getOne);
    	return class;
    }
    
    int main(void)
    {
    	struct Calculate* calc = new(CalculateProxy)();
    	printf("%X!\n", calc->getOne(calc));
    }

    жавашок попросил реализовать паттерн прокси на Си

    digitalEugene, 06 Ноября 2021

    Комментарии (149)
  6. JavaScript / Говнокод #23462

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    var CodeMirror = require("codemirror");
    var Thrift = require("thrift.js");
    require("./src/my.css");
    include(`gen-js/test_types.js')
    include(`gen-js/TestServ.js')
    include(`src/main.js')

    Против m4 нет приёма.

    CHayT, 29 Октября 2017

    Комментарии (149)
  7. Куча / Говнокод #20483

    +11

    1. 1
    Есть ли жизнь после 40?

    Что происходит с программистами после 40? Они из окон не выбрасываются? У меня вот на работе ни одного такого нет. На предыдущей работе тоже не было. И вообще, по наблюдениям, 90 квантиль в индустрии - 28 лет.

    kurwa, 07 Августа 2016

    Комментарии (149)
  8. PHP / Говнокод #19019

    +2

    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
    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
    class/View.php
    
    <?php
    
    class View {
    
    ...
    
      public function compile() {
        $view_src = file_get_contents(VIEW_SRC_PATH . $this->full_name . EXT);
        // echo
        $view_src = preg_replace("/\{\{(\w+)\}\}/", "<?php echo \$$1; ?>", $view_src);
        $view_src = preg_replace("/\{\{(\w+)\|(\w+)\}\}/", "<?php echo \$$1['$2']; ?>", $view_src);
        $view_src = preg_replace("/\{\{(\w+)\.(\w+)\}\}/", "<?php echo \$$1->$2; ?>", $view_src);
        // foreach
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$2 as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\|(\w+)-->/", "<?php foreach(\$$2['$3'] as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$2->$3 as \$$1): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)\.(\w+)-->/", "<?php foreach(\$$3->$4 as \$$1 => \$$2): ?>", $view_src);
        $view_src = preg_replace("/<!--each\s+(\w+)\s+(\w+)\s+in\s+(\w+)-->/", "<?php foreach(\$$3 as \$$1 => \$$2): ?>", $view_src);
        $view_src = preg_replace("/<!--each-->/", "<?php endforeach; ?>", $view_src);
        // switch
        $view_src = preg_replace("/<!--select\s+(\w+)\.(\w+)-->\s*<!--when\s+(.+)-->/", "<?php switch(\$$1->$2): case $3: ?>", $view_src);
        $view_src = preg_replace("/<!--when\s+(.+)-->/", "<?php break; ?><?php case $1: ?>", $view_src);
        $view_src = preg_replace("/<!--otherwise-->/", "<?php break; ?><?php default: ?>", $view_src);
        $view_src = preg_replace("/<!--select-->/", "<?php endswitch; ?>", $view_src);
        if (!file_exists(VIEW_PATH . $this->path)) mkdir(VIEW_PATH . $this->path, 0777, true);
        $fp = fopen(VIEW_PATH . $this->full_name . EXT, 'w');
        fwrite($fp, $view_src);
        fclose($fp);
      }
    
    ...
    
    ?>
    
    view-src/ShadeType.php
    
    {{type.name}}
    <!--each k d in type.diameters-->
    <h1>{{k}}</h1>
      <!--each s in d-->
      <div>
        {{s.bottom}} × {{s.top}} × {{s.height}}
        <div>
          <!--select s.mode-->
          <!--when 'u'-->(на ушках)
          <!--when 'p'-->(только подвес)
          <!--otherwise--> 
          <!--select-->
        </div>
      </div>
      <!--each-->
    <!--each-->
    
    view/ShadeType.php
    
    <?php echo $type->name; ?>
    <?php foreach($type->diameters as $k => $d): ?>
    <h1><?php echo $k; ?></h1>
      <?php foreach($d as $s): ?>
      <div>
        <?php echo $s->bottom; ?> × <?php echo $s->top; ?> × <?php echo $s->height; ?>
        <div>
          <?php switch($s->mode): case 'u': ?>(на ушках)
          <?php break; ?><?php case 'p': ?>(только подвес)
          <?php break; ?><?php default: ?> 
          <?php endswitch; ?>
        </div>
      </div>
      <?php endforeach; ?>
    <?php endforeach; ?>

    На хостинге PHP 5.2, а старые версии фреймворков не хочется. Решил запилить свой.

    kgm-rj, 13 Ноября 2015

    Комментарии (149)
  9. Куча / Говнокод #18572

    −2

    1. 1
    https://toster.ru/q/216153

    Бугурт пыхарей/1с-ников

    3_14dar, 04 Августа 2015

    Комментарии (149)
  10. Python / Говнокод #17962

    −115

    1. 1
    print 1 < 2 == 2 > 1 in [1,2,3] < [2,3,4,5] != 1

    Данный кусочек кода ( взял на одном из сайтов с тестами) навел меня на мысль - а может быть люди говнокодят потому, что языки программирования позволяют это делать? Взглянув на него первая моя мысль была - что это за хрень, она не будет работать. Оказалось я был не прав.

    Zuzik, 08 Апреля 2015

    Комментарии (149)
  11. Pascal / Говнокод #12107

    +99

    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
    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
    Procedure TForm1.CreateObjects(Column, Row: Integer); // Процедура создания кнопок (ячеек).
    Var
      i, j, iLeft, iTop, iRow : Integer; // Переменные, отвечающие за расположение ячеек на форме. (Кроме iRow, она содержит номер ячейки по горизонтали.)
      SpeedButton : array of TSpeedButton; // Собственно, сам массив с ячейками.
      cColumn : Char; // Номер ячейки по вертикали.
      iMine : ShortInt; // Дополнительная переменная кол-ва бомб на поле.
    BEGIN
    {Присваиваем начальные значения переменным. :7:}
      iLeft := 0; // Начальная позиция по горизонтали.
      iTop := 5; // Начальная позиция по вертикали.
      iRow := 1; // Номер ячейки по горизонтали.
      iMine := MineCount; // Кол-во мин на поле.
      cColumn := 'A'; // Номер ячейки по вертикали.
      SetLength(SpeedButton, Row+1); // Массив с ячейками.
    {------------------------------------------ :7:}
    
    {Создаём новые списки. :8:}
      FObjectList := TObjectList.Create; // Список с объектами.
      Form2.FMineList := TStringList.Create(); // Список с номерами мин на поле.
    {--------------------- :8:}
    
    {Главный цикл создания игрового поля :9:}
      For i := 1 to Column do // Запускаем цикл создания по вертикали.
       Begin
        For j:=1 to Row do // Теперь тоже самое по горизонтали.
         bEgin
           SpeedButton[j] := TSpeedButton.Create(Self); // Создаём очередную ячейку на поле.
           SpeedButton[j].Parent := GamePanel; // Этим параметром указываем, что ячейка принадлежит первой форме.
           SpeedButton[j].Top := iTop; // Задаём расположение ячейки по вертикали.
           SpeedButton[j].Name := cColumn + IntToStr(iRow); // Задаём имя ячейки.
           SpeedButton[j].Flat := True; // Используем св-во кнопок не отображаться на рисунке.
           SpeedButton[j].Font.Color := clBlue; // Делаем цвет текста синим.
           SpeedButton[j].Font.Style := [fsBold]; // Делаем шрифт жирным.
           SpeedButton[j].OnClick := SpeedButton1.OnClick; // Указываем, какая процедура будет вызываться при клике на ячейку.
           SpeedButton[j].OnMouseDown := SpeedButton1.OnMouseDown; // Указываем, какая процедура будет вызываться при нажатии на ячейку.
           SpeedButton[j].Left := iLeft+8; // Задаём расположение ячейки по горизонтали, смещая её на 8 пикселей вправо.
           {Устанавливаем бомбу в ячейку. :10:}
             If (iMine <> 0) and (SpeedButton[j].Name <> 'A1') then // Если кол-во бомб не превышено, то...
              beGin
               Randomize; // Генерируем список ПСЧ.
               SpeedButton[j].Tag := Random(2); // Случайным образом задаём, будет ли бомба находится в ячейке.
               If SpeedButton[j].Tag = 1 then
                begin
                 Form2.FMineList.Add(SpeedButton[j].Name); // Добавляем новую запись в массив бомб.
                 Dec(iMine); // Уменьшаем счетчик мин на единицу.
                end;
              enD;
           {----------------------------- :10:}
             FObjectList.Add(SpeedButton[j]);// Добавляем новую запись в массив ячеек.
             iLeft := iLeft + 24; //Увеличиваем расстояние между ячейками.
             If iRow = Row then iRow := 1 // Если номер следующей ячейки по горизонтали неправильный, то меняем его на 1.
              Else Inc(iRow); // Иначе увеличиваем номер.
         eNd;
        cColumn := Char(Ord(cColumn) + 1); // Увеличиваем номер ячейки по вертикали.
        iTop := iTop + 24; // Увеличиваем положение ячейки по вертикали.
        iLeft := 0; // Обнуляем позицию ячейки по горизонтали.
       End;
    {----------------------------------- :9:}
    
      ImageList1.GetBitmap(0, (FindComponent('A1') as TSpeedButton).Glyph); // Загружаем спрайт в первую ячейку.
      Form2.FMineList.SaveToFile('OUTPUT.TXT'); // Сохраняем расположение мин в файл.
      MineCountLabel.Caption := IntToStr(Form2.FMineList.Count); // Показываем колво мин на поле.
    END;
    
    Function TForm1.CheckMove(X,Y : ShortString): Boolean; // Функция проверки валидности ячейки. Она должна находится рядом с текущей.
    Var
     iXod, iAlf : Integer; // Вспомогательные переменные.
    BEGIN
     result := false; // Презумпция вины :)
     iXod := Abs(StrToInt(Y) - StrToInt(dPos.yInt)); // Получаем расстояние до текущей ячейки по горизонтали.
     iAlf := Abs(Ord(dPos.xChr) - Ord(X[1])); // Получаем расстояние до текущей ячейки по вертикали.
     If ((iXod <= 1) and (iAlf <= 1)) and ((iXod <> 0) or (iAlf <> 0)) then result := true; // И если оно не больше одного, то разрешаем ход.
    END;
    
    Procedure TForm1.SpeedButton1Click(Sender: TObject); // Главная процедура нажатия на кнопку(ячейку).
    Var
      i : Integer; // Счётчик цикла.
      cObject : TSpeedButton; // Сам объект.
      Str, j : String; // Вспомогательная переменная имени ячейки.
      Count : Integer; // Вспомогательная переменная. (стр. 160)
    BEGIN
    {Подготавливаем переменные :1:}
      cObject := TSpeedButton(Sender); // Получаем ячейку, на которую кликнули.
      Str := cObject.Name; // Присваиваем вспомогательной переменной имя задействованной ячейки.
      dClick.xAlf := Str[1]; // Присваиваем переменной первый символ задействованной ячейки по вертикали.
      dClick.yFlt := Copy(Str, 2, Length(Str)); // Получаем номер ячейки по горизонтали.
    {------------------------- :1:}
    ...

    По просьбам желающих. Код некогда созданной мною игрушки Сапёр. Отдельный прикол, это как потом все эти кнопки удаляются.

    Govnocoder#0xFF, 12 Ноября 2012

    Комментарии (149)