Rzućmy okiem na typową pętlę, która zwykle wykonuje 8 iteracji:
for (int x=0; x<8; ++x);
Musisz uczynić to nieskończonym!
To konkurs popularności dla wszystkich języków obsługujących taką formę forpętli. Tak więc wygrywa rozwiązanie z najwyższym wynikiem (głosowanie pozytywne i głosowanie negatywne).
Jeśli Twój język ma inną formę forpętli, ale jesteś pewien, możesz zrobić z nim coś fajnego, opublikuj odpowiedź i oznacz ją jako niekonkurencyjną. Zastrzegam sobie prawo do rozszerzenia zakresu dostępnych konstrukcji i języków, ale nigdy się nie zmniejszy, więc nie bój się upuścić wcześniej poprawnych rozwiązań.
Co to jest rozwiązanie
Rozwiązanie składa się z dwóch programów.
Pierwszy program to czysty program. Jest to typowy program w Twoim języku z forpętlą wykonującą 8 iteracji. Powinien to być normalny program, który mógł napisać każdy programista. Żadnych specjalnych hacków do celów przygotowawczych. Na przykład:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Drugi program jest rozszerzony. Ten program powinien zawierać cały kod z czystego programu i trochę dodatkowego kodu. Liczba punktów rozszerzeń jest ograniczona , szczegółowe informacje można znaleźć w pełnej sekcji reguł. Może być rozszerzonym programem dla powyższego czystego programu
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
To tylko przykład (niekompilowalny w C ++), aby pokazać pomysł. Prawdziwie poprawny program rozszerzony musi być kompatybilny, działać i mieć nieskończoną pętlę.
Kompletne zasady
Oba programy:
- Każdy język z obsługą takich
forpętli jest w porządku. - Korpus pętli musi być pusty. Mówiąc dokładniej, możesz umieścić jakiś wynik lub inny kod w pętli, ale zachowanie pętli powinno być takie samo w przypadku pustej pętli.
Czysty program:
Pętla używa licznika liczb całkowitych lub liczbowych i wykonuje 8 iteracji:
for (int x=0; x<8; ++x); // C, C++, C# for (var x=0; x<8; ++x); // C#, Javascript for (auto x=0; x<8; ++x); // C, C++ for (auto signed x=0; x<8; ++x); // C, C++ for (register int x=0; x<8; ++x); // C, C++Typy zdefiniowane przez użytkownika są niedozwolone.
- Używanie właściwości (oprócz zmiennej globalnej) zamiast zmiennej pętli jest niedozwolone.
Deklaracja zmiennej może znajdować się wewnątrz lub na zewnątrz pętli. Poniższy kod jest w porządku:
int x; for(x=0; x<8; ++x);Można użyć przyrostu przedrostka lub przyrostka.
Limit pętli
8należy zapisać jako stały literał bez zapisywania nazwanej stałej lub zmiennej. Ma na celu zapobieganie rozwiązaniom opartym na zadeklarowaniu zmiennej lub stałej równej 8, a następnie zmianie przypisania, zastąpienia lub zacienienia przez inną wartość:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Program rozszerzony:
- Musi zawierać cały kod z czystego.
- Powinien rozszerzyć czysty program w ograniczonej liczbie punktów rozszerzenia.
- Musi wykonać tę samą
forpętlę, co sama pętla nieskończona.
Umieszczenie pętli w innej nieskończonej konstrukcji nie jest w porządku. - Dopasowanie kodu w czasie wykonywania lub kompilacji jest dozwolone, o ile jego tekstowa reprezentacja pozostaje niezmieniona.
- Umieszczanie konstrukcji w sznurku i przechodzenie do niej
evaljest zabronione.
Punkty rozszerzenia:
- W dowolnym miejscu poza fragmentem z czystym kodem, w tym innymi plikami lub innymi zestawami.
foroświadczenie (jako pojedynczy element -forkonstrukcja i jego korpus) musi pozostać niezmienione.- Deklaracja zmiennej musi pozostać taka sama.
- Dowolne miejsce między prostymi instrukcjami może być wykorzystane jako punkt rozszerzenia.
- Jeśli i tylko jeśli zmienna została zadeklarowana poza pętlą i bez natychmiastowego przypisania wartości, takie przypisanie można dodać.
/* extension point here */
int main()
/* extension point here */
{
/* extension point here */
int x /* extension point for assignment here */;
/* extension point here */
for (x=0; x<8; ++x);
/* extension point here */
return 0;
/* extension point here */
}
/* extension point here */
int main()
{
/* BEGIN: No changes allowed */ int x = 0; /* END */
/* extension point here */
/* BEGIN: No changes allowed */ for (x=0; x<8; ++x); /* END */
return 0;
}
PS: Jeśli to możliwe, proszę podać link do internetowego IDE.
java.lang.Integer? 2. Lepiej byłoby to przy odpowiednim kryterium wygranej.