Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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;
Это у меня однокурсник писал пятнашки(данная процедура заполняет массив неповторяющимися числами от одного пятнадцати), и не лень же ему было...
А, убедили, Паскаль говно, потому что на нём можно написать end; end; end; итд.
C говно, потому что на нём можно написать
};};};}; итд
Лисп говно, потому что на нём можно написать
))))))))
Питон говно, потому что на нём можно написать
не правда. это проблема языка.
В 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...
>намного красивее стало?
Станет намного хуже! Уедет код за пару экранов. В этот момент говнокодера осенит и он поймет, что его код - говно. Как видно на дельфах автора не осенило, тк все выглядит более или менее читаемо. Пописав на вайтспейс-языках - сразу бы перестал говнокодить. Они дисциплинируют.
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);
говно.
есть целый класс алгоритмов, основанных на рандоме.
другой вопрос, там корректность решения обеспечивается иным способом (от задачи завит), а выход из цикла дополнительно по количеству итераций или таймауту.
ну а тут оно, конечно, не применимо.
да ладно? не проще ли заполнить массив числами от 1 до 15, а затем перемешать?
Я делал как-то так:
for (int i = 0; i < count; i++)
{
r = rand(count);
swap(i, r);
}
Алгоритм, проверенный временем, так сказать. Другой вопрос, что просто чистым рандомом нельзя пятнашки генерить - не все сочитания решаемы.
размищения
И все таки он страшно не читаемый. Скобочки приятней.
end; end; end; end; end; end; end;
На пайтоне в ноль строчек
C говно, потому что на нём можно написать
};};};}; итд
Лисп говно, потому что на нём можно написать
))))))))
Питон говно, потому что на нём можно написать
> ))))))))
fixed
в остальном всё верно
можно
ну типа того
};};};};
}}}}
;;;;
Быдлокодик!
И комитить сразу в репозиторий,
В репозиторий!
Раз словечко, два словечко - будет песенка!
Цикл раз, цикл два - будет лесенка!
В F#/Python и тд нет всяких скобочек или бегин-эндов. Это whitespace язык. То есть вложенность определяется за счет числа табов\пробелов. С использованием скобочек или бегин-эндов можно написать так, как в данном говнокоде - не читаемо. А необходимость для вложенности использовать сдвиги- вайтспейсы - заставляет и дисциплинирует программиста писать правильно. Этакий принудительный сдвигиватель вложений, как в визуал-бейсике, но только на уровне языка. Ну и вообще писать меньше, так что антииндусская технология.
Автор увидел проблему: вложенность глубины порядка 15 не помещается на экране. Его гениальным решением было убрать идентацию вообще. Это же проще, чем придумать нормальный алгоритм.
Следовательно проблема всё-же не в языке, а в авторе.
код говно, автор мудак
спс, кеп.
Только вот этот язык скрыл от говнокодера правду о его способностях к программированию, а вот васпейс язык, когда код ушел бы за пару экранов, недвусмысленно бы намекнул автору кода, что он мудак.
которая, кстати, мне тоже оч не нравится
Ты так говоришь, как-будто все равно не расставляешь все эти вайтспейсы в коде, тк есть всякие "скобочки".
А раз ты их все равно расставляешь их, то нафиг "скобочки" нужны тогда?
Не оправдывайся. Ты всерьёз думаешь, что я тебе поверю?
лесенка на whitespace-языке будет выглядеть не намного лучше.
кстати, конкретно в этом коде эти энды и соответствующие им бегины не нужны.
код очень напоминает индусов - не хватает только a1, a2,... a16 вместо a[...]
перепишите эту кучу на F#/Python...
намного красивее стало?
>намного красивее стало?
Станет намного хуже! Уедет код за пару экранов. В этот момент говнокодера осенит и он поймет, что его код - говно. Как видно на дельфах автора не осенило, тк все выглядит более или менее читаемо. Пописав на вайтспейс-языках - сразу бы перестал говнокодить. Они дисциплинируют.
Сколько табов? Тота. А есть антиговнокодерские языки, что заставят тебя это сделать, например визуалбейсик через автоматику иде (но там это не помогает) или вайтсейс языки, где сам компилятор заставляет ставить вайтспейсы, иначе не заработает или не скомпилируется.
Конечно, не поставленный вайтспейс - не единственное место, где говнокодер может наговнокодить, к сожалению.
Отформатировал твой анус, проверь.
можно и if'ами
надо через впн ходить
Даже холокост заблочили суки...
Если с рандомом не повезёт, то число никогда не выпадет такое, какое надо.
Короче, любой алгоритм, где есть
repeat
r := random;
until f(r);
говно.
другой вопрос, там корректность решения обеспечивается иным способом (от задачи завит), а выход из цикла дополнительно по количеству итераций или таймауту.
ну а тут оно, конечно, не применимо.
Я знаю, сам такие применяю, но сейчас я не о них.
ХУУУУУЛИИИИ!!!11 ему руки не отрубили!