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

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

    +132

    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
    public static string[] GetLogicalDrives()
    {
    	// System.Environment.GetLogicalDrives()
    	new EnvironmentPermission(PermissionState.Unrestricted).Demand();
    	// System.IO.Directory.GetLogicalDrives()
    	new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Demand();
    
    	int logicalDrives = Win32Native.GetLogicalDrives();
    	if (logicalDrives == 0)
    	{
    		__Error.WinIOError();
    	}
    	uint num = (uint)logicalDrives;
    	int num2 = 0;
    	while (num != 0u)
    	{
    		if ((num & 1u) != 0u)
    		{
    			num2++;
    		}
    		num >>= 1;
    	}
    	string[] array = new string[num2];
    	char[] array2 = new char[]
    	{
    		'A',
    		':',
    		'\\'
    	};
    	num = (uint)logicalDrives;
    	num2 = 0;
    	while (num != 0u)
    	{
    		if ((num & 1u) != 0u)
    		{
    			array[num2++] = new string(array2);
    		}
    		num >>= 1;
    		char[] expr_6E_cp_0 = array2;
    		int expr_6E_cp_1 = 0;
    		expr_6E_cp_0[expr_6E_cp_1] += '\u0001';
    	}
    	return array;
    }

    Копался сегодня в дебрях .NET'а и нашёл 2 метода получения списка дисков:
    System.Environment.GetLogicalDrives() и System.IO.Directory.GetLogicalDrives()
    Различается код только первой срокой запроса разрешений.

    Если один метод устарел-бы, то можно было его форварднуть через атрибут TypeForwardedTo.
    Или хотя-бы объединить код вынеся запрос разрешений.

    Оба метода доступны ещё с .NET 1.1. Но вот класс DriveInfo, который появился только в .NET 2.0 использует метод Directory.GetLogicalDrives()

    Это такая "фича" с копипастом кода или тут есть какой-то сакральный смысл?

    TauSigma, 25 Июня 2013

    Комментарии (13)
  3. 1C / Говнокод #13169

    −162

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    //сохраним уже начисленные услуги
    Если УслугиПоГрафику.Количество() > 0 Тогда
    	ПромежуточнаяТаблица = УслугиПоГрафику.Выгрузить();
    	УслугиПоГрафику.Очистить();
    
    	Для Каждого СтрокаТЗ Из ПромежуточнаяТаблица Цикл
    		НоваяСтрока = УслугиПоГрафику.Добавить();
    		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЗ);
    	КонецЦикла;
    КонецЕсли;

    Видимо изначально здесь что-то делалось с данными в таблице, потом было не глядя удалено, в результате остался вот такой кусок медитативного кода.

    madcat_sev, 13 Июня 2013

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

    +12

    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
    template <class ToPtr,class From>
    ToPtr DynamicCast (From f)
    {
      // static check if *ToPtr is derived from f
      (void)sizeof (static_cast<From> ((ToPtr)NULL));
      // lazy precalculation
      static bool castable = dynamic_cast<ToPtr> (f)!=NULL;
      static int offset =
        int ((char *)dynamic_cast<ToPtr> (f)-(char *)f);
      return castable? (ToPtr)((char *)f+offset) : NULL;
    }
    
    // usage: TBase *ptr1 = ...; TDerived *ptr2 = DynamicCast<TDerived *> (ptr1);

    Performance oriented dynamic_cast

    Artur, 11 Июня 2013

    Комментарии (13)
  5. PHP / Говнокод #13100

    +151

    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
    function getNextDay($_arr_date, $day)
    {
        $_arr_result = array();
        $str_result = '';
    
        $str_result = substr($_arr_date[0], 0, 2);
        $str_result .= '-';
        $str_result .= substr($_arr_date[0], 2, 2);
        $str_result .= '-';
        $str_result .= substr($_arr_date[0], 4, 4);
    
        $arrDate = explode('-', $str_result);
    
        $_arr_result[0] = date('d-m-Y', mktime(0, 0, 0, $arrDate[1], $arrDate[0] + $day, $arrDate[2]));
        $_arr_result[1] = date('d-m-Y', mktime(0, 0, 0, $arrDate[1], ($arrDate[0] + $day + 1), $arrDate[2]));
        $_arr_result[2] = date('Y-m-d', mktime(0, 0, 0, $arrDate[1], $arrDate[0] + $day, $arrDate[2])); //for BD
        $_arr_result[3] = date('Y-m-d', mktime(0, 0, 0, $arrDate[1], ($arrDate[0] + $day + 1), $arrDate[2])); //for BD
    
        return $_arr_result;
    }

    Получаем дату следующего дня

    stsaranchin, 04 Июня 2013

    Комментарии (13)
  6. C++ / Говнокод #13094

    +35

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #if defined(_WIN32) || defined(_WIN64)
        ofstream outfile("help.txt");
        outfile << message << endl;
        system("notepad.exe help.txt");
     #else
        cout << message ;
    #endif

    Зачем бороться с юникодом в консоли, когда есть блокнот?

    crastinus, 03 Июня 2013

    Комментарии (13)
  7. Java / Говнокод #13085

    +76

    1. 1
    https://github.com/mongodb/mongo-java-driver/blob/master/src/main/com/mongodb/ConnectionStatus.java#L213

    wtf?!

    orion, 31 Мая 2013

    Комментарии (13)
  8. SQL / Говнокод #13040

    −158

    1. 1
    2. 2
    3. 3
    4. 4
    update "Employee"."Jobs" set "default_group_id" = '1' where "id" in (select "id" from "Employee"."Jobs" where title like '%родавец%');
    update "Employee"."Jobs" set "default_group_id" = '2' where "id" in (select "id" from "Employee"."Jobs" where title like '%правляющ%');
    update "Employee"."Jobs" set "default_group_id" = '3' where "id" in (select "id" from "Employee"."Jobs" where title like '%лиент%');
    update "Employee"."Jobs" set "default_group_id" = '4' where "id" in (select "id" from "Employee"."Jobs" where title like '%клад%' and title not like '%борщиц%');

    like '%клад% должен был включать всяких "работников склада" и "замзавсклада", но туда попала также и "уборщица склада" - пришлось заводить второе условие

    AntonioK, 23 Мая 2013

    Комментарии (13)
  9. Pascal / Говнокод #13023

    +84

    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
    uses crt;
    type point=record{точки}
               x,y:real;
               end;
         okr=record{окружности}
             x,y,r:real;
             end;
    const nmax=20;
    function Peres(a,b:point;c:okr):boolean;{пересекаются или нет}
    var s,ab,h:real;
    begin
    s:=abs(a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y));{удвоенная площадь треугольника
    вершины которого центр окружности и 2 точки}
    ab:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y));{сторона, противоположная центру окружности}
    h:=s/ab;{высота на нее=расстояние от центра до прямой}
    Peres:=h<c.r;{если лно меньше радиуса, пересекаются}
    end;
    var a:array[1..nmax] of point;
        b:array[1..nmax] of okr;
        n,m,i,j,k,p,mx,imx,jmx:integer;
    begin
    clrscr;
    randomize;
    repeat
    write('Количество точек до ',nmax,' n=');
    readln(n);
    until n in [1..nmax];
    repeat
    write('Количество окружностей до ',nmax,' m=');
    readln(m);
    until m in [1..nmax];
    for i:=1 to n do
     begin
      a[i].x:=-10+random*21;
      a[i].y:=-10+random*21;
     end;
    for i:=1 to m do
     begin
      b[i].x:=-5+11*random;
      b[i].y:=-5+11*random;
      b[i].r:=5*random;
     end;
    writeln('Координаты точек:');
    write('X:');
    for i:=1 to n do
    write(a[i].x:6:2);
    writeln;
    write('Y:');
    for i:=1 to n do
    write(a[i].y:6:2);
    writeln;
    writeln;
    writeln('Параметры окружностей:');
    write('X:');
    for i:=1 to m do
    write(b[i].x:6:2);
    writeln;
    write('Y:');
    for i:=1 to m do
    write(b[i].y:6:2);
    writeln;
    write('R:');
    for i:=1 to m do
    write(b[i].r:6:2);
    writeln;
    writeln;
    mx:=0;
    imx:=0;
    jmx:=0;
    for i:=1 to n-1 do
    for j:=i+1 to n do
     begin
      k:=0;
      for p:=1 to m do
      if Peres(a[i],a[j],b[p]) then k:=k+1;
      if k>mx then
       begin
        mx:=k;
        imx:=i;
        jmx:=j;
       end;
     end;
    if mx=0 then write('Нет пересекающихся прямых и окружностей')
    else
     begin
      writeln('Максимальное число пересечений прямой с окружностями=',mx);
      write('Эта прямая проходит через точки (',a[imx].x:0:2,';',a[imx].y:0:2,') и (',a[jmx].x:0:2,';',a[jmx].y:0:2,')');
     end;
    readln
    end.

    Рекурсивная функций с циклами тройной вложенности

    Psilon, 20 Мая 2013

    Комментарии (13)
  10. PHP / Говнокод #13021

    +153

    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
    function u8($win,$h,$t)  
    {  
    global $w8;  
    $w8[chr($h).chr($t)] = $win;  
    }  
    $c1 = chr(208);  
    $c2 = chr(209);  
    u8("й",208,185); u8("ц",209,134); u8("у",209,131);  
    u8("к",208,186); u8("е",208,181); u8("н",208,189);  
    u8("г",208,179); u8("ш",209,136); u8("щ",209,137);  
    u8("з",208,183); u8("х",209,133); u8("ъ",209,138);  
    u8("ф",209,132); u8("ы",209,139); u8("в",208,178);  
    u8("а",208,176); u8("п",208,191); u8("р",209,128);  
    u8("о",208,190); u8("л",208,187); u8("д",208,180);  
    u8("ж",208,182); u8("э",209,141); u8("я",209,143);  
    u8("ч",209,135); u8("с",209,129); u8("м",208,188);  
    u8("и",208,184); u8("т",209,130); u8("ь",209,140);  
    u8("б",208,177); u8("ю",209,142); u8("Й",208,153);  
    u8("Ц",208,166); u8("У",208,163); u8("К",208,154);  
    u8("Е",208,149); u8("Н",208,157); u8("Г",208,147);  
    u8("Ш",208,168); u8("Щ",208,169); u8("З",208,151);  
    u8("Х",208,165); u8("Ъ",208,170); u8("Ф",208,164);  
    u8("Ы",208,171); u8("В",208,146); u8("А",208,144);  
    u8("П",208,159); u8("Р",208,160); u8("О",208,158);  
    u8("Л",208,155); u8("Д",208,148); u8("Ж",208,150);  
    u8("Э",208,173); u8("Я",208,175); u8("Ч",208,167);  
    u8("С",208,161); u8("М",208,156); u8("И",208,152);  
    u8("Т",208,162); u8("Ь",208,172); u8("Б",208,145);  
    u8("Ю",208,174); u8("ё",209,145); u8("Ё",208,129);  
       
    function utf2win ($text)  
    {  
    global $c1,$c2,$w8;  
    $u = false;  
    $temp = "";  
    for($i=0,$len=strlen($text); $i<$len; $i++) {  
      $c = substr($text,$i,1);  
      if ($u) {  
      $c = $w8[$lc.$c];  
      $temp .= isset($c)?$c:"?";  
      $u = false;  
      }  
      else if ($c==$c1 || $c==$c2) {  
      $u = true;  
      $lc = $c;  
      }  
      else  
      $temp .= $c;  
    }  
    return $temp;  
    }

    Это код переводит строку из кодировки UTF-8 в Windows-1251. Его автор явно не о iconv.

    vbysnek, 19 Мая 2013

    Комментарии (13)
  11. 1C / Говнокод #13006

    −171

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    ЕстьПроблема       = (Мин(СсылкаНаЗапрос.ЭтоПроблема,СвязанныйЗапрос.ЭтоПроблема)<>Макс(СсылкаНаЗапрос.ЭтоПроблема,СвязанныйЗапрос.ЭтоПроблема));
    ТолькоПроблемы = Мин(СсылкаНаЗапрос.ЭтоПроблема,СвязанныйЗапрос.ЭтоПроблема);
    
    Если ЕстьПроблема И Не ТолькоПроблемы Тогда 
         // кусок кода
    Иначе 
         // кусок кода
    КонецЕсли;

    Наваял тут... Самому прикольно стало.

    jerokee, 16 Мая 2013

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