1. JavaScript / Говнокод #16573

    +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
    function parse(input) {
            var options = arguments.length > 1 ? arguments[1] : {},
        
                peg$FAILED = {},
        
                peg$startRuleFunctions = { grammar: peg$parsegrammar },
                peg$startRuleFunction  = peg$parsegrammar,
        
                peg$c0 = peg$FAILED,
                peg$c1 = null,
                peg$c2 = [],
                peg$c3 = function(initializer, rules) {
    . . .
                peg$c142 = { type: "other", description: "whitespace" },
                peg$c143 = /^[ \t\x0B\f\xA0\uFEFF\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]/,
                peg$c144 = { type: "class", value: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]", description: "[ \\t\\x0B\\f\\xA0\\uFEFF\\u1680\\u180E\\u2000-\\u200A\\u202F\\u205F\\u3000]" },
        
                peg$currPos          = 0,
                peg$reportedPos      = 0,
                peg$cachedPos        = 0,
                peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
                peg$maxFailPos       = 0,
                peg$maxFailExpected  = [],
                peg$silentFails      = 0,
        
                peg$result;
    . . . // + 3К строк бреда до конца функции

    История моих мытарств и жалких метаний:
    Меня попросило начальство радикально улучшить формат в котором приложение хранит данные. Думал я, думал, и решил, что YAML ка нельзя лучше подходит для задачи (нужно хранить описание слайдов презентации, т.е. много текста и довольно схематичная графика, все это желательно бы иметь возможность комфортно редактировать в текстовом виде, создавать заготовки и т.д.).

    Шаг первый: поиск готового YAML парсера, врезультате обнаружились две штуки для АС3. Один - клон Ява парсера, в котором по класу на токен. Я не шучу. Проект заброшен 5 лет назад. Второй: заброшен 4 года назад, все в одном файле, парсится регулярками и магией, какие-то комментарии имеются, но они только свидетельствуют о несостоятельности писавшего коментарии.

    Подумал: если нет нормального парсера, может есть генератор парсеров?

    Шаг второй: поиск обнаружил одну попытку написать клон ANTLR, но очень ограниченную, и не работающую.

    Думаю: ну бля, если все так херово, может с ж.скрипта портирую чего-нибудь простенькое, PEG как раз должен подойти.

    И тут я нашел это.

    wvxvw, 21 Августа 2014

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

    −163

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    Стр = Строка(Формат(ТекущаяДата(), "ДФ=гггг"))
    			+ Формат(ТекущаяДата(), "ДФ=ММ") 
    			+ Формат(ТекущаяДата(), "ДФ=дд")+"_";
    			
    	Стр = Стр + СтрЗаменить(Строка(Формат(ТекущаяДата(), "ДЛФ=В")),":","");

    Мусьё знает толк. Очердной туроператор склеил ласты =)

    safer_bwd, 20 Августа 2014

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

    +134

    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
    String r_count = "";
                String r_cat = "";
                String r_pansion = "";
                for (Int32 ii = 0; ii < rows.Count; ii++)
                {
                    Int32 j = rows[ii].NNight;
                    DateTime d = rows[ii].DateBeg;
                    DateTime d_e = rows[ii].DateEnd;
                    Int32 type = rows[ii].MinLength > 0 ? 3 : 2;
                    j = (type == 3) ? -1 : j;
    
                    Int32 lengthMin = rows[ii].MinLength;
                    if (((d < date1 || d > date2) && type != 3))
                        continue;
                    else
                        if (!(d <= date1 && d_e >= date1 || d <= date2 && d_e >= date2) && date1 != DateTime.MinValue && date2 != DateTime.MaxValue && type == 3)
                            continue;
                    String _r_count = _Rooms[rows[ii].RoomId];
                    String _r_cat = _RoomCat[rows[ii].RoomCatId];
                    String _r_pansion = _Pansions[rows[ii].PansionId];
                    List<String> a = new List<string>();
                    if (_r_count != r_count || _r_cat != r_cat || _r_pansion != r_pansion)
                    {
                        if (!String.IsNullOrEmpty(r_count) && !String.IsNullOrEmpty(r_cat))
                        {
                            Pricing.RoomCat cat = new Pricing.RoomCat();
                            cat.RoomCount = r_count;
                            cat.RoomName = r_cat;
                            cat.PansionName = r_pansion;
    
                            p.rooms.Add(cat);
                        }
                        r_count = _r_count;
                        r_cat = _r_cat;
                        r_pansion = _r_pansion;
                    }

    Краху туроператоров способствовали также и собственные инженеры.

    tablecell, 20 Августа 2014

    Комментарии (24)
  4. 1C / Говнокод #16570

    −158

    1. 1
    2. 2
    3. 3
    4. 4
    Если Переменная1 <> 0 Тогда
    Иначе
       Переменная1 = 0;
    КонецЕсли;

    Пять минут пытался убедить нашу "программистку" с десятилетним стажем, что этот высер ничего не делает! Сошлись на том, что она "всё таки удалит его, но если появятся ошибки - она здесь не при чем"!
    Этот кусок я бы и не заметил, если бы не бросился в глаза пустой блок "Тогда" при использовании блока "Иначе"

    doom2good, 20 Августа 2014

    Комментарии (66)
  5. Java / Говнокод #16569

    +72

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    protected boolean matches(final PlasticField field) {
    		try {
    			return (this.type() == null) || this.type().getName().equals(field.getTypeName()) ? true : Class.forName(
    				this.type().getName()).isAssignableFrom(Class.forName(field.getTypeName()));
    		} catch (final ClassNotFoundException e) {
    			this.logger.error(e.getMessage(), e);
    		}
    		return false;
    	}

    DRY in action

    такая вот говнопластмасса

    Lure Of Chaos, 20 Августа 2014

    Комментарии (0)
  6. PHP / Говнокод #16568

    +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
    if(!CModule::IncludeModule("iblock")) return; 
    $arFilter = array(
    	"IBLOCK_ID" => intval($arParams["IBLOCK_ID"]),
        "SECTION_CODE" => "",
    	"PROPERTY_OWNER"=>CUser::GetId(),
    );
    $arSelect = Array("ID", "NAME", "PROPERTY_arrived", "PROPERTY_IDTRACK", "PROPERTY_OWNER");
    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array(), $arSelect);
    
    $arResult = array();
    while($ob = $res->GetNextElement())
    {
     $arFields = $ob->GetFields();
     $data = array("TRACK"=>$arFields);
     
     $arSelectHistroty = array("property_date","property_status_str","property_place","name");
     $arFilterHistroty = array("IBLOCK_ID" =>$arParams["IBLOCK_ID_HISTORY"],"SECTION_CODE" => "","NAME"=>$arFields[ID]);
     $resHistory = CIBlockElement::GetList(Array(), $arFilterHistroty, false, Array(), $arSelectHistroty);
     
     while($history = $resHistory->GetNextElement()){
    	$history = $history->GetFields();
    	$data["HISTORY"][] = $history;
     }
     
    
     $arResult["ITEMS"][] = $data;
     
    };

    заведомо известно что в $arFields[ID] передается 1301
    строка 17, если name маленькими буквами то ответ не правильный, т.е возвращает элементы с [NAME] => 1294.
    но если NAME большими буквами, то ответ правильный: ****"SECTION_CODE" => "","NAME"=>1301); < часть ответа.
    Ладно бы ничего не возвращал,...но с ошибкой..

    Guron, 20 Августа 2014

    Комментарии (0)
  7. Си / Говнокод #16567

    +140

    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
    //block.exe
    //divide information by bloks
    #include<fstream> 
    #include <string>  
    #include <windows.h>
    #include <ctime>   // time
    #include<iostream>
    using namespace std;
    int main()
    {
     FreeConsole();
    
       //dati programe zapustitsia
    
    
    char mask[255];
    
    
    char maski1[255],  maski2[255], maski3[255], maski4[255], maski5[255], maski6[255];
    char maski7[255],  maski8[255],  maski9[255], maski10[255], maski11[255],  maski12[255], maski13[255];
    
    //  [SKIPPED]
    char maski250[255],  maski251[255],  maski252 [255],  maski253[255],  maski254[255],  maski255[255]; 
    char maski256[255];
    
    char maski82[255], maski83[255],maski84[255],maski85[255], maski86[255], maski87[255];
    
    string str2;
    
    ifstream failpozovatelia("fail.txt");
               while (!failpozovatelia.eof())
               {
                failpozovatelia>>mask;
                cout<<mask<<endl;
            ifstream rt(mask);
    
            while (!rt.eof())
               {
    
           rt>>maski1>>maski2>>maski3>>maski4>>maski5>>maski6>>maski7>>maski8>>maski9>>maski10;
         rt>>maski11>>maski12>>maski13>>maski14>>maski15>>maski16>>maski17>>maski18>>maski19>>maski20>>maski21;
         rt>>maski22>>maski23>>maski24>>maski25>>maski26>>maski27>>maski28>>maski29>>maski30>>maski31;
         rt>>maski32>>maski33>>maski34>>maski35>>maski36>>maski37>>maski38>>maski39>>maski40>>maski41>>maski42;
    
    // SKIPPED
    
      cout<<maski1<<maski2<<maski3<<maski4<<maski5<<maski6<<maski7<<maski8<<maski9<<maski10;
         cout<<maski11<<maski12<<maski13<<maski14<<maski15<<maski16<<maski17<<maski18<<maski19<<maski20<<maski21;
         cout<<maski22<<maski23<<maski24<<maski25<<maski26<<maski27<<maski28<<maski29<<maski30<<maski31;
         cout<<maski32<<maski33<<maski34<<maski35<<maski36<<maski37<<maski38<<maski39<<maski40<<maski41<<maski42;
     
    // SKIPPED
    
     ofstream blockfaila("block.txt",ios::out);
     {
         
               blockfaila<<maski1<<maski2<<maski3<<maski4<<maski5<<maski6<<maski7<<maski8<<maski9<<maski10;
          blockfaila<<maski11<<maski12<<maski13<<maski14<<maski15<<maski16<<maski17<<maski18<<maski19<<maski20<<maski21;
          blockfaila<<maski22<<maski23<<maski24<<maski25<<maski26<<maski27<<maski28<<maski29<<maski30<<maski31;
          blockfaila<<maski32<<maski33<<maski34<<maski35<<maski36<<maski37<<maski38<<maski39<<maski40<<maski41<<maski42;
          blockfaila<<maski43<<maski44<<maski45<<maski46<<maski47<<maski48<<maski49<<maski50<<maski51<<maski52;
      
    // SKIPPED
    
     }
       Sleep(128);
    
      blockfaila.close();
    
    
    //wait other opration while done.
    a:
         ifstream nextblock("nextblock.txt");
        {
    
        nextblock>>str2;
        }
    
         string sub3 = "*";
      unsigned int pos2 = str2.find(sub3,0);
      cout << " You have enter " << str2 << endl;
    
        if(pos2 != string::npos)
        {
        {
           Sleep(128);
    
    
        }  
    
           
         else
        {goto a;
        }
    
                        }
                       }
    
    return 0;}

    12 это 35 это 7876...
    126321 124 351895321 84 42 21 11 6 3 2 1 52 26 13 7 421 8+16=32 32 16 8 4 2 1
    00100 1 0 10 100 4+16+64=84 0 0 1 1 0 10 0 0 0 1 0 1000 0 0 0 0 0 0
    821 32 168 4 2 1
    обратно если длины нехватает береш двух значнае, все рабоботает, пересчитай, если не сжимается минусуешь минус 10 и пробуешь сжать снова сжать.

    TarasB, 19 Августа 2014

    Комментарии (479)
  8. Куча / Говнокод #16566

    +143

    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
    Монады как коллбеки
    
    На джаваскриптовой конференции, о которой я писал в прошлом посте, в процессе обсуждения 
    ФП неизбежно встала тема монад.
    
    Мне было интересно, насколько легко можно объяснить монады «на пальцах». Возможно, не в 
    той степени, чтобы человек смог сразу с ними программировать, но в той степени, чтобы понимать,
     что они делают и зачем нужны.
    
    И у меня возникла идея объяснить монады без типов. Мне кажется, главную сложность при изучении 
    монад вызывают именно типы (а точнее, конструкторы типов и классы конструкторов типов), т.к. многие 
    приходят в Haskell из языков с менее выразительной системой типов.
    
    В то же время, монады могут существовать и в динамических языках. А если из монад убрать типы, 
    то останется лишь то, как они работают во время исполнения — и там все довольно прозрачно.
    
    Вычислительная сущность монад — это continuation passing style, или коллбеки. Любая программа 
    на node.js написана в этом стиле.
    
    Левый аргумент >>= — вычисление, а правый — коллбек. Коллбек принимает результат вычисления 
    и совершает какие-то дальнейшие вычисления
    
    Эта аналогия особенно точно выполняется для монад Identity, IO, Maybe/Either. Каждая отдельная 
    монада определяет, к чему конкретно будет применен коллбек.
    
    Но посмотрим, например, на монаду [] (список). Если руководствоваться только лишь представлением 
    о монаде как о вызове коллбеков, то самый простой способ определить списочную монаду — это a >>= k = map k a (что неверно).
    
    Аналогия с коллбеками слишком «императивна» и не улавливает тонкость — структуру самой монады. 
    Чтобы эту структуру наглядно показать, как раз и нужны типы.

    kegdan, 19 Августа 2014

    Комментарии (8)
  9. Perl / Говнокод #16565

    −159

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    my @args = (
    	one => 1,
    	two => 2,
    	three => 3,
    );
    
    croak(q/'hashes' only/) if (@args & 1);
    
    my $args = join ';', map { join '=', @args[$_, $_ + 1] } grep { !($_ & 1) } 0 .. $#args;

    Осилил, блин...

    Elvenfighter, 19 Августа 2014

    Комментарии (4)
  10. JavaScript / Говнокод #16563

    +159

    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
    $(function () {
        $('#Who').click(whoAre);
    });
    
    function whoAre() {
        var who = document.getElementById('whoAreyou');
        var value = who.style.display;
        var aspnetRoles = document.getElementById('aspnetRoles');
        
        if (value == "none") {
            who.style.display = "block";
                aspnetRoles[0].value = "Агент";
                aspnetRoles[1].value = "Арендодатель";
                aspnetRoles[0].text = "Агент";
                aspnetRoles[1].text = "Арендодатель";
        } else {
            who.style.display = "none";
            
            aspnetRoles[0].value = "Moderator";
            aspnetRoles[1].value = "Moderator";
            aspnetRoles[0].text = "Moderator";
            aspnetRoles[1].text = "Moderator";
        }
        
    }

    меняет элементы, option

    Emir, 19 Августа 2014

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