Ваша задача - создать самую большую программу, в которой вы можете использовать только один GOTO, без чего вся программа (или, по крайней мере, огромная ее часть) должна быть полностью реструктурирована. Оценка подсчитывается как количество утверждений в вашем коде, которые меняются местами или вводятся заново (удаление утверждений не добавляет к вашему счету), когда код реструктурируется без GOTO (другим разрешено оспаривать вашу реструктуризацию, представляя более элегантный). Поскольку это кодовый боулинг, выигрывает наибольшее количество очков.
Примечание: я не несу никакой ответственности за атаки велоцираптора, пытаясь выполнить этот вызов.
code-bowling
Джо З.
источник
источник
goto
наswitch
кажется возможной для обоих.Ответы:
C fizzbuzz
Это решение основано на идее прерываний и меток переменных (только gcc, извините). Программа устанавливает таймер, который периодически вызывает main, и мы переходим к тому месту, где было указано последнее выполнение нашего обработчика прерываний (main).
Я никогда раньше не использовал таймеры или переменные меток, так что я думаю, что здесь есть что добавить.
источник
run
должен быть объявленvolatile
, иначеwhile(run)
может быть "оптимизирован" дляwhile(1)
. Или вместо этого просто зайдите куда-нибудь, что звонитexit
.volatile int num
вне основного должно сделать это. Сstatic
, gcc думает, что знает, кто может связываться с этим.Perl
Я не очень хорош в боулинге, но подозреваю, что это может заинтересовать ОП. Это сито Эратосфена с использованием переменной goto. Если бы это было «рефакторингом», я сомневаюсь, что что-то из этого можно будет использовать повторно, кроме, возможно, первых нескольких строк. Когда сито заканчивается, все остальные
1
s в@primes
массиве соответствуют простым значениям.Для дополнительного удовольствия не используются операторы and, or, ternaries, условные операторы или операторы сравнения любого вида.
источник
С
Мое использование макросов, возможно, не делает его "одним GOTO".
И он довольно короткий, поэтому «полностью перестроен» не так уж и много.
Но вот моя попытка в любом случае.
Считывает число из стандартного ввода, печатает его по модулю 3.
источник
printf
иscanf
. Оценка вашего решения, скорее всего, будет около 2 или 3.n%3
таким образом. Это должна быть программа, которая становится запутанной при удалении GOTO , а не при его введении .goto
, программа не будет работать. Но что вы ожидали - что программа станет запутанной только удалением?