1. Pascal / Говнокод #8199

    +106

    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
    procedure Tform1.mix;
    begin
     randomize;
     a[1]:=random(16)+1;
     btn[1].Caption:=inttostr(a[1]);
    begin
    repeat
     a[2]:=random(16)+1
    until
     a[2]<>a[1];
     btn[2].Caption:=inttostr(a[2]);
    begin
    repeat
     a[3]:=random(16)+1
    until
     (a[3]<>a[2]) and (a[3]<>a[1]);
     btn[3].Caption:=inttostr(a[3]);
    begin
    repeat
     a[4]:=random(16)+1
    until
     (a[4]<>a[2]) and (a[4]<>a[1]) and (a[4]<>a[3]);
     btn[4].Caption:=inttostr(a[4]);
    begin
    repeat
     a[5]:=random(16)+1
    until
     (a[5]<>a[2]) and (a[5]<>a[1]) and (a[5]<>a[3]) and (a[5]<>a[4]);
     btn[5].Caption:=inttostr(a[5]);
    begin
    repeat
     a[6]:=random(16)+1
    until
     (a[6]<>a[1]) and (a[6]<>a[2]) and (a[6]<>a[3]) and (a[6]<>a[4])
     and (a[6]<>a[5]);
     btn[6].Caption:=inttostr(a[6]);
    begin
    repeat
     a[7]:=random(16)+1
    until
     (a[7]<>a[1]) and (a[7]<>a[2]) and (a[7]<>a[3]) and
     (a[7]<>a[4]) and (a[7]<>a[5]) and (a[7]<>a[6]);
     btn[7].Caption:=inttostr(a[7]);
    begin
    repeat
     a[8]:=random(16)+1
    until
     (a[8]<>a[1]) and (a[8]<>a[2]) and (a[8]<>a[3]) and
     (a[8]<>a[4]) and (a[8]<>a[5]) and (a[8]<>a[6]) and (a[8]<>a[7]);
     btn[8].Caption:=inttostr(a[8]);
    begin
    repeat
     a[9]:=random(16)+1
    until
     (a[9]<>a[1]) and (a[9]<>a[2]) and (a[9]<>a[3]) and (a[9]<>a[4]) and
     (a[9]<>a[5]) and (a[9]<>a[6]) and (a[9]<>a[7]) and (a[9]<>a[8]);
     btn[9].Caption:=inttostr(a[9]);
    ...
    ...
    ...
    begin
    repeat
     a[14]:=random(16)+1
    until
     (a[14]<>a[1]) and (a[14]<>a[2]) and (a[14]<>a[3])
     and (a[14]<>a[4]) and (a[14]<>a[6]) and
     (a[14]<>a[7]) and (a[14]<>a[5]) and (a[14]<>a[9])
     and (a[14]<>a[8]) and (a[14]<>a[10]) and
     (a[14]<>a[11]) and (a[14]<>a[12]) and (a[14]<>a[13]);
     btn[14].Caption:=inttostr(a[14]);
    begin
    repeat
     a[15]:=random(16)+1
    until
     (a[15]<>a[1]) and (a[15]<>a[2]) and (a[15]<>a[3]) and
     (a[15]<>a[4]) and (a[15]<>a[6]) and (a[15]<>a[7]) and
     (a[15]<>a[5]) and (a[15]<>a[9]) and (a[15]<>a[8]) and
     (a[15]<>a[10]) and (a[15]<>a[11]) and (a[15]<>a[12])
     and (a[15]<>a[13]) and (a[15]<>a[14]);
     btn[15].Caption:=inttostr(a[15]);
    begin
    repeat
     a[16]:=random(16)+1
    until
     (a[16]<>a[1]) and (a[16]<>a[2]) and (a[16]<>a[3]) and
     (a[16]<>a[4]) and (a[16]<>a[6]) and (a[16]<>a[7]) and
     (a[16]<>a[5]) and (a[16]<>a[9]) and (a[16]<>a[8]) and
     (a[16]<>a[10]) and (a[16]<>a[11]) and (a[16]<>a[12])
     and (a[16]<>a[13]) and (a[16]<>a[14]) and (a[16]<>a[15]);
     btn[16].Caption:=inttostr(a[16]);
     timer3.Enabled:=true;
    end; end; end; end; end; end; end; end; end;
    end; end; end; end; end; end; end;

    Это у меня однокурсник писал пятнашки(данная процедура заполняет массив неповторяющимися числами от одного пятнадцати), и не лень же ему было...

    Запостил: suc-daniil, 14 Октября 2011

    Комментарии (77) RSS

    • талант ) мне бы вот никогда не пришло в голову реализовать алгоритм "взять случайное число, проверить на повтор, взять другое если повторы есть" ))
      Ответить
      • Там так и надо, фишка вся в реализации, там примерно 200 строк кода такое выполняют..., нормальным алгоритмом это делается в 15-20 строчек
        Ответить
        • > Там так и надо
          да ладно? не проще ли заполнить массив числами от 1 до 15, а затем перемешать?
          Ответить
          • Но не взбалтывать
            Ответить
          • Дык, если если вручную перемешивать... то придется каким-либо образом проверять текущий случайный индекс (не был ли уже).
            Ответить
            • А смысл?
              Я делал как-то так:
              for (int i = 0; i < count; i++)
              {
              r = rand(count);
              swap(i, r);
              }

              Алгоритм, проверенный временем, так сказать. Другой вопрос, что просто чистым рандомом нельзя пятнашки генерить - не все сочитания решаемы.
              Ответить
              • > сочитания
                размищения
                Ответить
                • не придирайтесь ) Это на человеческом, а не математическом )
                  Ответить
    • чатабильно с этими эндами - как говно
      Ответить
    • Кстати делал когда-то такое:)
      И все таки он страшно не читаемый. Скобочки приятней.
      Ответить
    • То есть обязателен был массив, строка показалась слишком простым способом =\
      Ответить
    • >end; end; end; end; end; end; end; end; end;
      end; end; end; end; end; end; end;

      На пайтоне в ноль строчек
      Ответить
      • в тред реквестируется тарас
        Ответить
        • А, убедили, Паскаль говно, потому что на нём можно написать end; end; end; итд.
          C говно, потому что на нём можно написать
          };};};}; итд
          Лисп говно, потому что на нём можно написать
          ))))))))
          Питон говно, потому что на нём можно написать

          Ответить
          • > Лисп говно, потому что на нём можно нужно писать
            > ))))))))
            fixed

            в остальном всё верно
            Ответить
            • не нужно
              можно
              olo
                (
                    lol
                     (
                     )
                )
              ну типа того
              Ответить
              • я о том, что если в случае Pascal и C приведённый Тарасом стиль - говно, то в Лиспе он является стандартом
                Ответить
                • нет, им пользоваться не обязательно и в стандарте он не прописан
                  Ответить
                  • в стандарте языка этот стиль явно не прописан (я не нашёл), но он является coding standard
                    Ответить
          • и тока жабаскрыпт идеален, потому что на нем можно писать, а можно и не писать
            };};};};
            }}}}
            ;;;;

            Ответить
          • На пайтоне просто будет лесенка
            Ответить
            • Вместе весело писать быдлокодик,
              Быдлокодик!
              И комитить сразу в репозиторий,
              В репозиторий!

              Раз словечко, два словечко - будет песенка!
              Цикл раз, цикл два - будет лесенка!
              Ответить
      • это проблема говнокодера а не языка, он наверняка на любом языке сможет без труда наложить кучу
        Ответить
        • не правда. это проблема языка.
          В F#/Python и тд нет всяких скобочек или бегин-эндов. Это whitespace язык. То есть вложенность определяется за счет числа табов\пробелов. С использованием скобочек или бегин-эндов можно написать так, как в данном говнокоде - не читаемо. А необходимость для вложенности использовать сдвиги- вайтспейсы - заставляет и дисциплинирует программиста писать правильно. Этакий принудительный сдвигиватель вложений, как в визуал-бейсике, но только на уровне языка. Ну и вообще писать меньше, так что антииндусская технология.
          Ответить
          • По мнению некоторых (http://lxr.linux.no/linux+v3.0.4/Documentation/CodingStyle#L30), глубина вложенности более 3 выдаёт ошибку в организации кода.
            Автор увидел проблему: вложенность глубины порядка 15 не помещается на экране. Его гениальным решением было убрать идентацию вообще. Это же проще, чем придумать нормальный алгоритм.
            Следовательно проблема всё-же не в языке, а в авторе.
            код говно, автор мудак
            Ответить
            • >код говно, автор мудак
              спс, кеп.
              Только вот этот язык скрыл от говнокодера правду о его способностях к программированию, а вот васпейс язык, когда код ушел бы за пару экранов, недвусмысленно бы намекнул автору кода, что он мудак.
              Ответить
          • Меня, кстати, не особо радует идея использовать пробелы для задания структуры кода. В Haskell это ещё более-менее оправдано, т.к. функции там обычно в одну-две строки (к тому же, такой подход опционален: желающие могут писать с фигурными скобками и использовать точку с запятой для разделения конструкций), а вот в Python я считаю это скорее недостатком, чем преимуществом языка.
            Ответить
            • в питоне вообще очень хотели избавиться от скобок и других "лишних" знаков, визуально как бы "разгружая" текст, делая его более читаемым - поэтому индентация там - вынужденная мера
              которая, кстати, мне тоже оч не нравится
              Ответить
              • >в питоне вообще очень хотели избавиться от скобок и других "лишних" знаков

                Ты так говоришь, как-будто все равно не расставляешь все эти вайтспейсы в коде, тк есть всякие "скобочки".

                А раз ты их все равно расставляешь их, то нафиг "скобочки" нужны тогда?
                Ответить
          • ну да, проблема исключительно в 16 end подряд, а алгоритм совсем не ГК ;)
            лесенка на whitespace-языке будет выглядеть не намного лучше.
            кстати, конкретно в этом коде эти энды и соответствующие им бегины не нужны.
            код очень напоминает индусов - не хватает только a1, a2,... a16 вместо a[...]
            Ответить
          • >не правда. это проблема языка.
            перепишите эту кучу на F#/Python...
            намного красивее стало?
            Ответить
            • Вот-вот, идиотизм разработчика никаким языком не скроешь
              Ответить
            • >перепишите эту кучу на F#/Python...
              >намного красивее стало?
              Станет намного хуже! Уедет код за пару экранов. В этот момент говнокодера осенит и он поймет, что его код - говно. Как видно на дельфах автора не осенило, тк все выглядит более или менее читаемо. Пописав на вайтспейс-языках - сразу бы перестал говнокодить. Они дисциплинируют.
              Ответить
              • Табов будет столько же, как и на другом языке, только без "end;end;end;..." или "}}}}}}"
                Ответить
                • Считать не умеешь?
                  if lol1 then
                  begin
                  ...
                  if lol2 then
                  begin
                  ...
                  if lol3 then
                  begin
                  ...
                  end; end; end;
                  Сколько табов? Тота. А есть антиговнокодерские языки, что заставят тебя это сделать, например визуалбейсик через автоматику иде (но там это не помогает) или вайтсейс языки, где сам компилятор заставляет ставить вайтспейсы, иначе не заработает или не скомпилируется.

                  Конечно, не поставленный вайтспейс - не единственное место, где говнокодер может наговнокодить, к сожалению.
                  Ответить
                  • То, что дельфи и си позволяют не форматировать код не значит, что этого делать не надо
                    Ответить
                    • ты это говнокодеру скажи. он ведь не поймет, пока лбом не стукнется. поэтому вайтспейс язык бы подошел для этого идеально. написав код, уехавший за 5 экранов на таком языке - он определенно вспомнит, что всегда мечтал пойти в дворники
                      Ответить
                    • @То, что дельфи и си позволяют не форматировать код не значит, что этого делать не надо

                      Отформатировал твой анус, проверь.
                      Ответить
      • )
        Ответить
    • А теперь пишем аналогичную игру 50x50 (полтиннички?)...
      Ответить
    • Я представляю как он проверяет решаемость расклада... если проверяет.
      Ответить
    • Такой проверки небыло, а выигрыш определялся if inttostr(a[0])=btn[0].caption then ... if inttostr(a[15])=btn[15].caption then finish := true; и масштабируемость, как вы заметили, ..., да здравствует индусский гк весом > 60кб!
      Ответить
    • Кстати, это потенциально бесконечный алгоритм.
      Если с рандомом не повезёт, то число никогда не выпадет такое, какое надо.
      Короче, любой алгоритм, где есть
      repeat
      r := random;
      until f(r);
      говно.
      Ответить
      • Переписывал данный ГК в нормальный вид так и произошло
        Ответить
      • Ну когда-нибудь таки в рандоме выпадет нужное число, а когда это произойдёт - это уже другой вопрос:)
        Ответить
      • есть целый класс алгоритмов, основанных на рандоме.
        другой вопрос, там корректность решения обеспечивается иным способом (от задачи завит), а выход из цикла дополнительно по количеству итераций или таймауту.
        ну а тут оно, конечно, не применимо.
        Ответить
        • > есть целый класс алгоритмов, основанных на рандоме

          Я знаю, сам такие применяю, но сейчас я не о них.
          Ответить
        • Генетические алгоритмы рулят, а в топике - унылое гавно
          Ответить
    • Старый тролль.
      Ответить
    • Хули. Хули! ХУЛИ! ХУЛИ!

      ХУУУУУЛИИИИ!!!11 ему руки не отрубили!
      Ответить
    • Я не понимаю, нахрена здесь столько begin .. end?
      Ответить

    Добавить комментарий