Twoim zadaniem jest zbudowanie jak największego programu, który używa dokładnie jednego GOTO, bez którego cały program (lub przynajmniej jego duża część) musi zostać całkowicie zrestrukturyzowany. Wynik jest liczony jako liczba instrukcji w kodzie, które zmieniają miejsca lub są nowo wprowadzone (usunięcie instrukcji nie dodaje do wyniku), gdy kod jest restrukturyzowany bez GOTO (inni mogą zakwestionować twoją restrukturyzację, przedstawiając więcej elegancki). Ponieważ jest to kręgle kodu, najwyższy wynik wygrywa.
Uwaga: nie ponoszę żadnej odpowiedzialności za ataki welociraptorów, podejmując wyzwanie.
code-bowling
Joe Z.
źródło
źródło
goto
przezswitch
wydaje się możliwe dla obu.Odpowiedzi:
C fizzbuzz
To rozwiązanie działa na zasadzie przerwań i etykiet zmiennych (tylko gcc, przepraszam). Program ustawia licznik czasu, który okresowo wywołuje main, gdzie mamy miejsce, w którym znajduje się ostatnie wykonanie naszego programu obsługi przerwań (main), który powiedział nam, że powinniśmy.
Nigdy wcześniej nie korzystałem z timerów ani zmiennych etykiet, więc myślę, że jest tu wiele do zrobienia.
źródło
run
należy zadeklarowaćvolatile
, w przeciwnym raziewhile(run)
można go „zoptymalizować” dowhile(1)
. Lub zamiast tego, po prostu mam gdzieś to wołaexit
.volatile int num
poza głównym powinno to zrobić. Zstatic
gcc uważa, że wie, kto może z tym zadzierać.Perl
Nie jestem zbyt dobry w kręgle, ale podejrzewam, że może to zainteresować OP. To sito Eratostenesa wykorzystujące zmienną goto. Gdyby to „refaktoryzować”, wątpię, by którykolwiek z nich nadawałby się do ponownego wykorzystania, może poza kilkoma pierwszymi liniami. Kiedy sito się kończy, wszystkie pozostałe
1
s w@primes
tablicy odpowiadają wartościom podstawowym.Dla dodatkowej zabawy używa się żadnych znaków „and”, „or”, trójek, warunkowych lub operatorów porównania.
źródło
do
Moje użycie makr prawdopodobnie nie czyni go „jednym GOTO”.
I jest dość krótki, więc „całkowicie zrestrukturyzowany” to niewiele.
Ale i tak oto moja próba.
Odczytuje liczbę ze standardowego wejścia, drukuje ją modulu 3.
źródło
printf
iscanf
. Wynik twojego rozwiązania najprawdopodobniej wynosiłby około 2 lub 3.n%3
w ten sposób. Powinien to być program, który staje się zawiły, gdy GOTO zostanie usunięte , a nie kiedy zostanie wprowadzone .goto
, program nie będzie działać. Ale czego się spodziewałeś - że program zostałby zawiły przez samo usunięcie?