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

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

    −7

    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
    import re
    
    def matrix():
        square = [[0 for x in range(7)] for x in range(7)]
        directions = ((1,0), (0,1), (-1,0), (0,-1))
        x, y, d = -1, 0, 0
        
        for i in range(49):
            while True:
                x1, y1 = x + directions[d][0], y + directions[d][1]
                
                if x1 >= 0 and x1 < 7 and y1 >= 0 and y1 < 7 and square[y1][x1] == 0:
                    x, y = x1, y1
                    break
                
                d = (d + 1) % 4
            
            square[y][x] = re.sub(r'\d', lambda n: ' ' * int(n.group()), '9de9mb8nv5yo4aol1rm')[i]
        
        return square
    
    print('\n'.join([''.join(line) for line in matrix()]).strip())

    по мативам http://govnokod.ru/23329#comment389918

    HACTEHbKA, 06 Сентября 2017

    Комментарии (16)
  3. Си / Говнокод #23224

    0

    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
    #include <stdio.h>
    
    typedef int (*FUNC)();
    
    FUNC test (int a, int b){
        int ret(){
            return a + b;
        }
    
        return ret;
    }
    
    int main(){
        printf("%i\n", test(40, 2)());
        return 0;
    }
    
    
    /* Тоже самое на JS */
    function test(a, b){
        function ret(){
            return a + b;
        }
    
        return ret;
    }
    
    alert(test(40, 2)());
    
    
    # Тоже самое на Python
    def test(a, b):
        def ret():
            return a + b
    
        return ret
    
    print test(40, 2)()

    Странно работает компилятор, версия: gcc version 4.7.2

    $ gcc 1.c && ./a.out
    42
    $ gcc -O3 1.c && ./a.out
    Segmentation fault

    j1392184, 28 Июля 2017

    Комментарии (16)
  4. C++ / Говнокод #23196

    0

    1. 1
    https://github.com/catboost/catboost

    Похоже яндекс заопенсорсил свежую версию аркадии. Давайте обсирать эти их велосипеды.

    FrauSchweinhund, 19 Июля 2017

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

    −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
    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
    static bool
    do_convert(iconv_t cd, const char * src, int src_len,
               char ** dst, int *dst_len)
      {
      char * ret;
    
      char *inbuf;
      char *outbuf;
      int alloc_size;
      int output_pos;
      size_t inbytesleft;
      size_t outbytesleft;
    
      if(src_len < 0)
        src_len = strlen(src);
    #if 0
      fprintf(stderr, "Converting:\n");
      bgav_hexdump(src, src_len, 16);
    #endif
      alloc_size = src_len + BYTES_INCREMENT;
    
      inbytesleft  = src_len;
    
      /* We reserve space here to add a final '\0' */
      outbytesleft = alloc_size-1;
    
      ret    = malloc(alloc_size);
    
      inbuf  = (char *)src;
      outbuf = ret;
    
      while(1)
        {
    
        if(iconv(cd, (ICONV_CONST char **)&inbuf, &inbytesleft,
                 &outbuf, &outbytesleft) == (size_t)-1)
          {
          switch(errno)
            {
            case E2BIG:
              output_pos = (int)(outbuf - ret);
    
              alloc_size   += BYTES_INCREMENT;
              outbytesleft += BYTES_INCREMENT;
    
              ret = realloc(ret, alloc_size);
              if (ret == NULL)
                {
                cdio_warn("Can't realloc(%d).", alloc_size);
                return false;
                }
              outbuf = ret + output_pos;
              break;
            default:
              cdio_warn("Iconv failed: %s", strerror(errno));
              if (ret != NULL)
                free(ret);
              return false;
              break;
            }
          }
        if(!inbytesleft)
          break;
        }
      /* Zero terminate */
      *outbuf = '\0';
    
      /* Set return values */
      *dst = ret;
      if(dst_len)
        *dst_len = (int)(outbuf - ret);
    #if 0
      fprintf(stderr, "Conversion done, src:\n");
      bgav_hexdump(src, src_len, 16);
      fprintf(stderr, "dst:\n");
      bgav_hexdump((uint8_t*)(ret), (int)(outbuf - ret), 16);
    #endif
      return true;
    }

    https://github.com/pbatard/rufus/blob/edcfd43ed550b17f23f9534f4b3b5cdd7fffdefc/src/libcdio/driver/utf8.c#L170-L248

    А вы тут видите тут баг?

    j123123, 05 Июля 2017

    Комментарии (16)
  6. Python / Говнокод #23032

    +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
    def inputCountSeq():
        try:
          countSeq=int(input("Введите количество элементов в последовательности от 1 до 1000: \r >"))
        except :
          print("[Ошибка] Введенные вами данные неверны")
          inputCountSeq()
          
        if (countSeq > 1000 or countSeq < 1):
          print("[Ошибка] Введенное число не соответствует указанному диапазону( 1 <= x <= 1000)")
          inputCountSeq()
          
        return countSeq
        
    print(inputCountSeq())

    Вводим -1 , получаем ошибку "Введенное число не соответствует указанному диапазону" ,после чего вводим 1 , а в возвращается все равно -1.

    https://repl.it/IAMA/3

    partizanes, 16 Мая 2017

    Комментарии (16)
  7. C++ / Говнокод #20314

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    ostringstream s;
    
    ...
    
    -    return s.str();
    +    return std::move(s.str());

    соптимизировано

    kurwa, 02 Июля 2016

    Комментарии (16)
  8. 1C / Говнокод #20130

    −98

    1. 1
    ЭтоДокумент = Метаданные.Документы.Содержит(ЭтотОбъект.Метаданные())

    Примечательно, что вызывается из модуля формы документа, больше нигде процедура с ЭТИМ не используется.
    В документе проверяем, что это документ :/

    Moonlight, 03 Июня 2016

    Комментарии (16)
  9. 1C / Говнокод #20080

    −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
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НоменклатурнаяГруппа", Объект.Ссылка);
    	
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Код,
    |	Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	Номенклатура.НоменклатурнаяГруппа.Ссылка = &НоменклатурнаяГруппа
    |
    |УПОРЯДОЧИТЬ ПО
    |	Номенклатура";
    	
    ТаблицаТоваров = Запрос.Выполнить().Выгрузить();
    
    СписокГруппы.Загрузить(ТаблицаТоваров);

    БП 3.0.43.174 (но не только), типовое заполнение формы номенклатурной группы номенклатурой.

    OdinAss, 26 Мая 2016

    Комментарии (16)
  10. C# / Говнокод #20057

    0

    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
    using Microsoft.VisualBasic.CompilerServices;
    using System;
    
    namespace ConsoleApplication2
    {
      [StandardModule]
      internal sealed class Module1
      {
        [STAThread]
        public static void Main()
        {
    label_0:
          int num1;
          int num2;
          try
          {
            ProjectData.ClearProjectError();
            num1 = 1;
    label_1:
            int num3 = 2;
            Test.TTT();
            goto label_8;
    label_3:
            num2 = num3;
            switch (num1)
            {
              case 1:
                int num4 = num2 + 1;
                num2 = 0;
                switch (num4)
                {
                  case 1:
                    goto label_0;
                  case 2:
                    goto label_1;
                  case 3:
                  case 4:
                    goto label_8;
                }
            }
          }
          catch (Exception ex) when (ex is Exception & (uint) num1 > 0U & num2 == 0)
          {
            ProjectData.SetProjectError(ex);
            goto label_3;
          }
          throw ProjectData.CreateProjectError(-2146828237);
    label_8:
          if (num2 == 0)
            return;
          ProjectData.ClearProjectError();
        }
      }
    }

    Вот какая жуть получилась при декомпиляции старого доброго On Error Resume Next из VB.
    Исходный код:
    Sub Main()
    On Error Resume Next
    TTT() 'определен в модуле Test
    Exit Sub
    End Sub

    yamamoto, 23 Мая 2016

    Комментарии (16)
  11. C++ / Говнокод #19981

    +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
    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
    int CHud :: DrawHudNumber( int x, int y, int iFlags, int iNumber, int r, int g, int b)
    {
    	int iWidth = GetSpriteRect(m_HUD_number_0).right - GetSpriteRect(m_HUD_number_0).left;
    	int k;
    	
    	if (iNumber > 0)
    	{
    		// SPR_Draw 100's
    		if (iNumber >= 100)
    		{
    			 k = iNumber/100;
    			SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
    			SPR_DrawAdditive( 0, x, y, &GetSpriteRect(m_HUD_number_0 + k));
    			x += iWidth;
    		}
    		else if (iFlags & (DHN_3DIGITS))
    		{
    			//SPR_DrawAdditive( 0, x, y, &rc );
    			x += iWidth;
    		}
    
    		// SPR_Draw 10's
    		if (iNumber >= 10)
    		{
    			k = (iNumber % 100)/10;
    			SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
    			SPR_DrawAdditive( 0, x, y, &GetSpriteRect(m_HUD_number_0 + k));
    			x += iWidth;
    		}
    		else if (iFlags & (DHN_3DIGITS | DHN_2DIGITS))
    		{
    			//SPR_DrawAdditive( 0, x, y, &rc );
    			x += iWidth;
    		}
    
    		// SPR_Draw ones
    		k = iNumber % 10;
    		SPR_Set(GetSprite(m_HUD_number_0 + k), r, g, b );
    		SPR_DrawAdditive(0,  x, y, &GetSpriteRect(m_HUD_number_0 + k));
    		x += iWidth;
    	} 
    	else if (iFlags & DHN_DRAWZERO) 
    	{
    		SPR_Set(GetSprite(m_HUD_number_0), r, g, b );
    
    		// SPR_Draw 100's
    		if (iFlags & (DHN_3DIGITS))
    		{
    			//SPR_DrawAdditive( 0, x, y, &rc );
    			x += iWidth;
    		}
    
    		if (iFlags & (DHN_3DIGITS | DHN_2DIGITS))
    		{
    			//SPR_DrawAdditive( 0, x, y, &rc );
    			x += iWidth;
    		}
    
    		// SPR_Draw ones
    		
    		SPR_DrawAdditive( 0,  x, y, &GetSpriteRect(m_HUD_number_0));
    		x += iWidth;
    	}
    
    	return x;
    }
    
    int CHud::GetNumWidth( int iNumber, int iFlags )
    {
    	if (iFlags & (DHN_3DIGITS))
    		return 3;
    
    	if (iFlags & (DHN_2DIGITS))
    		return 2;
    
    	if (iNumber <= 0)
    	{
    		if (iFlags & (DHN_DRAWZERO))
    			return 1;
    		else
    			return 0;
    	}
    
    	if (iNumber < 10)
    		return 1;
    
    	if (iNumber < 100)
    		return 2;
    
    	return 3;
    
    }

    Программишка, я тут тебе принёс ещё кода из Half-Life 1.
    https://github.com/ValveSoftware/halflife/blob/master/cl_dll/hud_redraw.cpp#L252

    Собственно, что код-то делает? Рисует спрайты с циферками. Те, что показывают текущее количество HP, брони, амуниции.

    a1batross, 11 Мая 2016

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