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

    В номинации:
    За время:
  2. Куча / Говнокод #14538

    +127

    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
    import std.stdio;
    
    struct Vector
    {
        private static bool checkOpDispatch(in string str)
        {
            if(str.length != 4) return false;
            foreach(c; str)
            {
                if(c != 'x' && c != 'y' && c != 'z' && c != 'w') return false;
            }
            return true;
        }
        float x,y,z,w;
    
        @property auto opDispatch(string s)() const if(checkOpDispatch(s))
        {
            return Vector(mixin(s[0..1]),
                          mixin(s[1..2]),
                          mixin(s[2..3]),
                          mixin(s[3..4]));
        }
        
        void print() const
        {
            writefln("Vector: %f, %f, %f, %f", x, y, z, w);
        }
    }
    
    void main() 
    {
    	//vector swizzling
        Vector v = {1,2,3,4};
        v.print();
        auto v1 = v.wzyx;
        v1.print();
        auto v2 = v.xyxy;
        v2.print();
    }

    http://ideone.com/bfA9gI

    LispGovno, 10 Февраля 2014

    Комментарии (5)
  3. Куча / Говнокод #14466

    +127

    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
    Привет! 
    Сообщество, посмотри C++11 код, а не ошибочно ли выбраны символы для обжатия шаблонных параметров. 
    <сказка> 
    
    Итак, жили-были две функции: 
    
    void func0(bool=false); //ok
    void func1(bool=8>=8);  //ok
    
    И на лексемы разбирались они успешно и без конфликтов.
    
    И был у них друг помошник: 
    
    #define F(TYPE,NAME,VALUE)TYPE NAME=VALUE;
    F(int,value,0);
    #undef F
    
    Лексер и его на лексемы разбирал.
    
    Но пришли злые шаблоногородители и по нагородили шаблонов...
    
    Нагородили шаблонные структуры типа таких: 
    
    template<bool>struct a{constexpr a(bool){}};
    
    и переменные типа таких: 
    
    a<0> var=0;
    map<int,int> m;
    
    А лексер всё стоял и терпел. Он всё успешно на лексемы разбирал.
    
    Но радилась как-то в коде функция типа такой: 
    
    void func2(a<0>=8>=8); // fail
    
    И не выдержал лексер: 
    
    prog.cpp:4:18: warning: comparisons like ‘X<=Y<=Z’ do not have their mathematical meaning [-Wparentheses]
     void func2(a<0>=8>=8); // fail
                      ^
    prog.cpp:4:12: error: parse error in template argument list
     void func2(a<0>=8>=8); // fail
                ^ 
    
    Не понял он что хотят от него. 
    
    void func2(a<0> = 8>=8 ); // это?
    void func2(a< 0>=8 > =8); // или это?
    
    ... да как же вам объяснить? 
    А давайте я заменю "<" на "{", а ">" на "}".
    
    И не понял лексер, что хотят от него. 
    
    void func2(a{0}=8>=8); // это?
    void func2(a{0>=8}=8); // или это?
    
    А потом уродилось в коде ещё и это: 
    
    #define F(TYPE,NAME,VALUE)TYPE NAME=VALUE;
    F(a<0>,var,0); //ok
    #undef F
    
    Но лексер терпел.
    
    Терпел, да не выдержал. 
    
    #define F(TYPE,NAME)TYPE NAME;
    F(map<int,int>,m); //fail
    #undef F
    
    Решил он забить на дело гиблое: 
    
    prog.cpp:7:17: error: macro "F" passed 3 arguments, but takes just 2
     F(map<int,int>,m); //fail
                     ^
    И ужёл он к другим стандартописателям. 
    </сказка> 
    tags: черновик, сказка, С++11, шаблоны, макросы, лексер

    Символы для обжатия параметров шаблонов выбраны ошибочно?

    LispGovno, 02 Февраля 2014

    Комментарии (39)
  4. Куча / Говнокод #14422

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    // ------- CLICKING STUFF IN CONTAINERS -------
    	if ((!( src in usr.contents ) && (((!( isturf(src) ) && (!( isturf(src.loc) ) && (src.loc && !( isturf(src.loc.loc) )))) || !( isturf(usr.loc) )) && (src.loc != usr.loc && (!( istype(src, /obj/screen) ) && !( usr.contents.Find(src.loc) ))))))
    		if (istype(usr, /mob/living/silicon/ai))
    			var/mob/living/silicon/ai/ai = usr
    			if (ai.control_disabled || ai.malfhacking)
    				return
    		else
    			return

    Взято из кода обработки нажатия одной опенсорсной онлайн-игрушки. Зачем, за что и почему?

    ACCount, 27 Января 2014

    Комментарии (3)
  5. Куча / Говнокод #14373

    +127

    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
    % restarter.erl
    
    -module(restarter).
    % Save it to restart the node!
    
    % где-то в коде при запуске приложения
       ....
       ok = sync:go(),
       sync:onsync(fun(Mods) ->
                    case lists:member(restarter, Mods) of
                        true -> 
                            lager:warning("Restarting node!"),
                            init:restart(); 
                        _ -> ok
                    end  
                end),
       ....

    Клуб веселых и находчивых эрлангеров.
    Придумал такую фичу: если мне во время разработки надо перезапустить тестовую ноду, я просто жму сохранить в открытом файле restarter.erl
    Sync подхватывает пересохраненный файл, компилит его и вызывает коллбэк со списком измененных модулей. Собственно, если рестартер среди них, то нода перезапускается :)

    tirinox, 16 Января 2014

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

    +127

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    <Grid x:Name="LayoutRoot" >
    	<Grid.ColumnDefinitions>
    		<ColumnDefinition />
    	</Grid.ColumnDefinitions>
    	<Grid.RowDefinitions>
    		<RowDefinition />
    	</Grid.RowDefinitions>
    	
    	// .. разные контролы
    	
    </Grid>

    Это тоже кусочек XAML (WPF)

    Smekalisty, 27 Сентября 2013

    Комментарии (14)
  7. Pascal / Говнокод #13220

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    function GetBiosNumber: string;
     begin
       result := string(pchar(ptr($FEC71)));
     end;

    Windows NT поддерживает прерывания!!! А Вы знали?

    Stertor, 23 Июня 2013

    Комментарии (246)
  8. Pascal / Говнокод #13218

    +127

    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
    Function DiskInDrive(ADriveLetter : Char) : Boolean;
    var
      SectorsPerCluster,
      BytesPerSector,
      NumberOfFreeClusters,
      TotalNumberOfClusters   : Cardinal;
    begin
      Result := GetDiskFreeSpace(PChar(ADriveLetter+':\'),
                                  SectorsPerCluster,
                                  BytesPerSector,
                                  NumberOfFreeClusters,
                                  TotalNumberOfClusters);
    
    end;
    
    // еще один шедевр:
    
    var
     SR  : TSearchRec;
     Res : integer;
     OldErrMode : integer;
    begin
     // Запоминаем текущий режим обработки ошибок и устанавливаем SEM_FAILCRITICALERRORS
     // Это необходимо для подавления появления окна с сообщение о том, что устройство не готово
     OldErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
     try
      Res := FindFirst('a:\*.*', faAnyfile, SR);
      FindClose(SR);
     finally
      SetErrorMode(OldErrMode)
     end;
    end;

    С помощью этих процедур Олежик Зайцев на своем сайте предлагает определять доступность дисков, минуя сообщение WINDOWS "Диск не готов".
    Без комментариев.

    Stertor, 23 Июня 2013

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

    +127

    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
    //top edge
                if (normal)
                    for (int i = y; i > 0; i--)
                        if (_map[x, i] == 0)
                            if ((i - 1) > minDist) { mnt.Corners[0] = new Point(x, i - 1 + minDist); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //top-right edge
                if (normal)
                    for (int i = 0; ((x + i) < MAP_SIZE) & ((y - i) > 0); i++)
                        if (_map[x + i, y - i] == 0)
                            if (Math.Sqrt(2) * (MAP_SIZE - i) > minDist) { mnt.Corners[1] = new Point(x + i - 1 - minDist, y - i + 1 + minDist); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //right edge
                if (normal)
                    for (int i = x; i < MAP_SIZE; i++)
                        if (_map[i, y] == 0)
                            if ((MAP_SIZE - i - 1) > minDist) { mnt.Corners[2] = new Point(i - 1 - minDist, y); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //bottom-right edge
                if (normal)
                    for (int i = 0; ((x + i) < MAP_SIZE) & ((y + i) < MAP_SIZE); i++)
                        if (_map[x + i, y + i] == 0)
                            if (Math.Sqrt(2) * (MAP_SIZE - i) > minDist) { mnt.Corners[3] = new Point(x + i - 1 - minDist, y + i - 1 - minDist); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //bottom edge
                if (normal)
                    for (int i = y; i > 0; i++)
                        if (_map[x, i] == 0)
                            if ((i - 1) > minDist) { mnt.Corners[4] = new Point(x, i - 1 - minDist); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //bottom-left edge
                if (normal)
                    for (int i = 0; ((x - i) < MAP_SIZE) & ((y + i) > 0); i++)
                        if (_map[x - i, y + i] == 0)
                            if (Math.Sqrt(2) * (MAP_SIZE - i) > minDist) { mnt.Corners[5] = new Point(x - i + 1 + minDist, y + i - 1 - minDist); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //left edge
                if (normal)
                    for (int i = x; i > 0; i--)
                        if (_map[i, y] == 0)
                            if ((i + 1) > minDist) { mnt.Corners[6] = new Point(i + 1 + minDist, y); break; }
                            else { normal = false; mnt.Height = -1; }
    
                //top-left edge
                if (normal)
                    for (int i = 0; ((x - i) > 0) & ((y - i) > 0); i++)
                        if (_map[x - i, y - i] == 0)
                            if (Math.Sqrt(2) * (MAP_SIZE - i) > minDist) { mnt.Corners[7] = new Point(x - i + 1 + minDist, y - i + 1 + minDist); break; }
                            else { normal = false; mnt.Height = -1; }

    Мне было лень думать. Очень лень.

    RaZeR, 11 Мая 2013

    Комментарии (1)
  10. Куча / Говнокод #12734

    +127

    1. 1
    2. 2
    $ svn ls -R | grep 'location.php' | wc -l
    87

    teh trauma (continued)
    Все 87 файлов выглядят более-менее одинаково... за исключением одного, или, возможно 2-3. Это никакие ни файлы настроек, ничего подобного. Там просто редирект куда-то.

    wvxvw, 12 Марта 2013

    Комментарии (5)
  11. Куча / Говнокод #12722

    +127

    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
    <form action="/b/wakaba.pl" method="post" enctype="multipart/form-data">
        <input type="hidden" name="task" value="search" /> 
        <input id="dynamicNamed" name="scommsubj" value="" type="text" placeholder="Поиск" required /> 
        <select> 
              <option id="opt0" value="scommsubj">везде</option> 
              <option id="opt1" value="searchsubj">в любом заголовке</option>
               <option id="opt2" value="searchcomm">в любом сообщении</option>
               <option id="opt3" value="tscommsubj">в главном посте треда</option>
               <option id="opt4" value="tsearchsubj">в главном заголовке треда</option>
               <option id="opt5" value="tsearchcomm">в главном сообщении треда</option>
         </select>
         <input type="submit" value="GO" onclick="javascript: buttonOK(); this.submit;" />
     </form> 
    
    
    function buttonOK()
    {
    	$id('dynamicNamed').name = $id('opt' + select.selectedIndex).value;
    }

    Сосач.
    Новое слово в передаче параметров.

    7ion, 11 Марта 2013

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