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

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

    +922.2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    __declspec(noreturn) int FastAdd(const int a, const int b)
    {
      __asm mov eax, a;
      __asm mov ebx, b;
      __asm add eax, ebx;
    };

    Встречаеться множество подобных функций в одном С++ проекте, который в данный момент разгребаю. Хочеться что-нибудь сказать автору. Например: "на XYZ"?

    Говногость, 08 Января 2010

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

    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
    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
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    #include <iostream>
    using namespace std;
    const char _Arr_Digit [] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'},
        _Arr_Mantissa [] = {'e', 'E'},
        _Arr_Sign [] = {'-', '+'},
        _Arr_Dot[] = {'.'},
        _Arr_Combo[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'};
    const bool DIGIT = false, SIGN = false, OTHER = true;  
    bool _Call_Mantissa = false,  _flag_dot = false, _flag_mant = false;
    int _position_mant;
    bool Parse_symbol (char _symb, const char* _Arr, int _size_arr);
    bool Parse_full_string (string _checking, int _offset, int _amount, bool _sec_cond, const char* _Arr, int _size_arr, bool _Drive);   
    bool Parse_the_first_symbol (string _checking);
    bool Parse_the_second_symbol (string _checking);
    bool Control_result (int i, string _checking);
    bool Parse_mantissa (string _checking);
    bool Parse_full_string_before_mantissa (int i, string _checking);
    bool Parse_the_first_symbol_after_mantissa (string _checking);
    bool Parse_full_string_after_mantissa (string _checking);
    long double Questioning (char s);
    long double Questioning (char s) {
        string _checking;
        while (true) {  
            cout << "Введите значение " << s << ": ";
            getline(cin, _checking);  
            if (_checking.length() == 0) 
                cout << "Вы не ввели значение!" << endl;   
            else if (!Parse_the_first_symbol(_checking)) 
                cout << "Некорректное значение!" << endl;  
            else return strtold(_checking.c_str(), nullptr); }}
    bool Parse_symbol (char _symb, const char* _Arr, int _size_arr) {
        for (int i = 0; i <= _size_arr; i++)  
            if (_symb == _Arr[i]) return true;
        return false; }
    bool Parse_full_string (string _checking, int _offset, int _amount, bool _sec_cond, const char* _Arr, int _size_arr, bool _Drive) {  
        bool _parse_flag;
        int _parse_count = 0;
        for (int j = _offset; j < _amount; j++) {
            if (Parse_symbol(_checking[j], _Arr, _size_arr)) {
                _parse_count++;
                if (_sec_cond) return false;
                if (_Drive) {
                    if (_Call_Mantissa)
                        _sec_cond = (j == (_amount-1));
                    if (_parse_flag) return false;
                    _parse_flag = true;
                    if (_Call_Mantissa) {
                        _flag_mant = _parse_flag;
                        _position_mant = j; 
                    }
                }
            }
        }
       if (!_Drive) { 
           if ((_amount - _offset) == _parse_count) return true;
           else return false; 
        }
       else return true; 
    }
    bool Parse_the_first_symbol (string _checking) {
      int LENGTH = _checking.length();
      bool _parse_cond = (LENGTH < 2);
      if (Parse_full_string (_checking, 0, 1, _parse_cond, _Arr_Sign, 1, SIGN)) 
          return Parse_the_second_symbol (_checking);
      else if (Parse_full_string (_checking, 0, 1, false, _Arr_Digit, 9, DIGIT))
          return Control_result (0, _checking);
      else return false; }
    bool Parse_the_second_symbol (string _checking) {
        if (Parse_full_string (_checking, 1, 2, false, _Arr_Digit, 9, DIGIT)) 
            return Control_result (1, _checking);
        else return false; }
    bool Control_result (int i, string _checking) {    
        if (!Parse_mantissa (_checking)) return false;    
        else if (_flag_mant) {
            string _before_mantissa = _checking.substr(0, _position_mant);
            string _after_mantissa = _checking.substr(_position_mant + 1);
            return (Parse_full_string_before_mantissa (i, _before_mantissa)
                    && Parse_the_first_symbol_after_mantissa (_after_mantissa)); } 
        else return Parse_full_string_before_mantissa (i, _checking); }
    bool Parse_mantissa (string _checking) {
        int LENGTH = _checking.length();
        _Call_Mantissa = true;   
        bool cash = Parse_full_string (_checking, 0, LENGTH, false, _Arr_Mantissa, 1, OTHER);
        _Call_Mantissa = false;
        return cash; }
    bool Parse_full_string_before_mantissa (int i, string _checking) { // but the first symbol  
        int LENGTH = _checking.length();
        return Parse_full_string (_checking, i, LENGTH, false, _Arr_Dot, 0, OTHER) &&
            Parse_full_string (_checking, i, LENGTH, false, _Arr_Combo, 10, DIGIT); }
    bool Parse_the_first_symbol_after_mantissa (string _checking) {
        int LENGTH = _checking.length();
        bool _parse_cond = (LENGTH < 2);
        if ((Parse_full_string (_checking, 0, 1, _parse_cond, _Arr_Sign, 1, SIGN)) ||
            (Parse_full_string (_checking, 0, 1, false, _Arr_Digit, 9, DIGIT)))
            return Parse_full_string_after_mantissa (_checking);
        else return false; }
    bool Parse_full_string_after_mantissa (string _checking) {
        int LENGTH = _checking.length();
        return Parse_full_string (_checking, 1, LENGTH, false, _Arr_Digit, 9, DIGIT); }

    Очередная говнопопытка оптимизации алгоритма.

    Westnik_Govnokoda, 30 Декабря 2020

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

    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
    template <typename T, typename OUT_T = uint8_t> 
    OUT_T subdecoder_nbt::extract_bits(T bits, uint8_t pos, uint8_t end)
    {
        auto invert_bytes = [](T bytes) -> T
        {
            auto *p     = reinterpret_cast<uint8_t*>(&bytes), 
                 *p_end = reinterpret_cast<uint8_t*>(&bytes) + sizeof(bytes) - 1; 
            for(; p < p_end; ++p, --p_end)
            {
                *p = *p ^ *p_end;
                *p_end = *p ^ *p_end;
                *p = *p ^ *p_end;
            }
    
            return bytes;
        };
    
        bits = invert_bytes(bits);
    
        bits <<= pos;
        bits >>= (sizeof(bits) * 8 - (end - pos) - 1);
    
        return (OUT_T)bits;
    }

    Как правильно доставать биты из промежутка из стандартных типов C++ на x86.
    Изучал эту проблему в сумме почти сутки.

    А всё потому, что x86 хранит байты в Little-Endian, из-за чего при сдвиге биты окажутся не там, где ожидаешь.

    YpaHeLI_, 23 Октября 2020

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

    −6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    "Сайт о прыщах, 9858 руб./месяц, 1000+ чел/сутки":
    
    https://telderi.ru/ru/viewsite/1356387
    
    "Продам сайт о прыщах, выписано 156 статей, можно собрать СЯ и полностью охватить тему, сайт любит и Гугл и Яндекс, трафик идет одинаково.
    Монетизация под эту нишу может быть офферная - с неё я думаю доходы будут выше, чем 10 000 руб. в месяц, я к сожалению опыта работы с офферами не имею, в принципе как и времени на этот проект.
    Просадка трафика на графике связана с фильтром от гугла: ранее сайт стоял с неоформленными статьями (без картинок, с битыми ссылками на видео), все переоформили и фильтр был снят. Я тут этот сайт
    и купил, пока он был под фильтром.
    Ссылки не закупались, но они и не нужны - гугл хорошо ранжирует сайт. Можно сделать перелинковку для увеличения позиций и трафика".

    0BEH, 26 Октября 2018

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

    +169

    1. 1
    this.value = this.value.replace(/./g, '');

    //гениальное обнуление строки

    garapup, 06 Декабря 2014

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

    +4

    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
    struct ServiceProvider1
    {
      ServiceProvider1(Service2& service1, Service3& service2, Service3& service3, Service4& service4, Service5& service5):
        service1(service1),
        service2(service2),
        service3(service3),
        service4(service4),
        service5(service5),
     {}
    
      fun<Service1> service1;//fun - функциональный объект (operator() перегружен), хранящий ссылку на сервис, чтобы не писать кроме членов ещё и две функции - константную и не константную.
      fun<Service2> service2;
      fun<Service3> service3;
      fun<Service4> service4;
      fun<Service5> service5;
    };
    
    class Service1
    {
    public:
      template<class ServiceProvider> 
      Service1(ServiceProvider serviceProvider):
        service2(serviceProvider.service2()),//Ссылки на сервисы получаем.
        service3(serviceProvider.service3()),
        myMember1(serviceProvider),//эти мемберы сами внутри воспользуются провайдерами зависимостей
        myMember2(serviceProvider),
        myMember3(),
        myMember4(myServiceProviderGeter<ServiceProvider>()),//Этому мембору понадобились новые зависимости, часть тех, что хранятся в ServiceProvider, а часть новых среди членов Service1.
        myMember5(myServiceProviderGeter<ServiceProvider>())
        myMember6(myServiceProviderGeter<ServiceProvider>())
      {}
      ...
    private:
      template<class BaseServiceProvider>
      struct MyServiceProvider: BaseServiceProvider
        {
           MyServiceProvider(BaseServiceProvider baseServiceProvider, Service6& service6, Service7& service7):
             BaseServiceProvider(baseServiceProvider),
             service6(service6),
             service7(service7)
           {}
           
           fun<Service6> service6;
           fun<Service7> service7;
        };
    
      template<class BaseServiceProvider> MyServiceProvider<BaseServiceProvider> myServiceProviderGeter(BaseServiceProvider baseServiceProvider) const
      {
        return MyServiceProvider<BaseServiceProvider>(baseServiceProvider, this->myMember2, this->myMember3);
      }
    };
    ...
    ServiceProvider1 sp(...);
    Servive1 service1(sp);
    Service8 service8(sp);
    Service9 service9(sp);
    ...

    оттуда

    LispGovno, 31 Января 2014

    Комментарии (146)
  8. C++ / Говнокод #11975

    +25

    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
    template <typename T> struct Pool { static std::vector<T> data; };
    
    std::vector<tbphys::Body> Pool<tbphys::Body>::data;
    std::vector<Ball>         Pool<Ball>        ::data;
    std::vector<Wall>         Pool<Wall>        ::data;
    std::vector<Bat>          Pool<Bat>         ::data;
    std::vector<Brick>        Pool<Brick>       ::data;
    
    template <typename T, typename U> struct List
    {
    	typedef T Head;
    	typedef U Tail;
    };
    
    struct End {};
    
    typedef List<tbphys::Body, List<Brick, List<Bat, List<Ball, List<Wall, End> > > > > Components;
    typedef List<Brick, List<Bat, List<Ball, List<Wall, End> > > > DrawableComponents;
    typedef List<Brick, List<Ball, List<Bat, End> > > MovableComponents;
    
    const size_t badindex = size_t(-1);
    
    struct GameBody
    {
    	size_t self,body,bat,brick,wall,ball;
    
    	template <typename T> size_t& IndexOf ();
    	template <> size_t& IndexOf <tbphys::Body> () {return body;}
    	template <> size_t& IndexOf <Bat  >        () {return bat;}
    	template <> size_t& IndexOf <Brick>        () {return brick;}
    	template <> size_t& IndexOf <Wall >        () {return wall;}
    	template <> size_t& IndexOf <Ball >        () {return ball;}
    
    	template <typename T>
    	T& AddComponent ()
    	{
    		size_t index = Pool<T>::data.size();
    		Pool<T>::data.resize(index+1);
    		T& result = Pool<T>::data[index];
    
    		result.hostIndex = self;	
    		IndexOf<T>() = index;
    		return result;
    	}
    
    	template <typename T> void SetBadIndex ()
    	{
    		IndexOf<T::Head> () = badindex;
    		SetBadIndex<T::Tail> ();
    	}
    	template <> void SetBadIndex <End> () {}
    };

    Сколько тут говнопаттернов крестоблядского крестоязыка?

    TarasB, 22 Октября 2012

    Комментарии (146)
  9. Python / Говнокод #26782

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    import json
    a = {}
    b = {}
    for i in xrange(128): a[str(i)] = i
    for i in a: b[i] = a[i]
    print a == b
    print json.dumps(a) == json.dumps(b)

    Результат:
    True
    False

    Почему не True True ?

    a02810, 30 Июня 2020

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

    −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
    * * u n s k i l l * * u n s k i l l * * u n s k i l l * *
    u                                                       u
    n                   _,,,-------,, ,-----,,_             n
    s                ,''             `         ``,          s
    k              ,'               /\           ',         k
    i            ,'             ,-''  ``-,          \       i
    l           /          ,,--'          `-,        |      l
    l          /      ,--''                  `-,      |     l
    *         |      |   -,___          ___,-  |     |      *
    u        |      |    _____`-,    ,-'____    |     |     u
    n        |     |    /     \        /    \   |     |     n
    s        |     |   |    O  |   \  |   O  |  |     |     s
    k       |      |    \_____/     \  \____/   |     |     k
    i       |      |                 \          |     |     i
    l      |       |                  \         |     |     l
    l     /         |              ---`         |      |    l
    *    |           \     `:---______---:`     |      |    *
    u    |            \     `,| |  |  | |'     |       |    u
    n   |              \      ``''''''''      /         |   n
    s   |               ',,                ,,'          |   s
    k  |                   ''------------''              |  k
    i  |                     |          |                |  i
    l |                      |          |                 | l
    l |                     |            |                | l
    * * u n s k i l l * * u n s k i l l * * u n s k i l l * *

    AHCKujlbHblu_netyx, 04 Мая 2019

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

    0

    1. 1
    Не нужно было меня банить. Я ничего не нарушал.

    BUTTHURT, 29 Октября 2018

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