Школоло / Говнокод #8199 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 suc-daniil, (Updated )

Комментарии (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

          в остальном всё верно
          Ответить
            • я о том, что если в случае 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 экранов на таком языке - он определенно вспомнит, что всегда мечтал пойти в дворники
                    Ответить
                  • @То, что дельфи и си позволяют не форматировать код не значит, что этого делать не надо

                    Отформатировал твой анус, проверь.
                    Ответить
                      • Доктор сказал на латыни, "поместил хуй за щеку, проверь" - отлично, проверил. Патологическое состояние. Теперь выпусти его изо рта.
                        Ответить
                        • общеизвестный факт: сетртор всегда говорит только про хуи за щекой
                          Ответить
  • Я представляю как он проверяет решаемость расклада... если проверяет.
    Ответить
  • Такой проверки небыло, а выигрыш определялся 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 ему руки не отрубили!
    Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8