Diamo un'occhiata a un ciclo tipico, che di solito esegue 8 iterazioni:
for (int x=0; x<8; ++x);
Devi renderlo infinito!
È un concorso di popolarità per tutte le lingue che supportano tale forma di for
loop. Quindi vince la soluzione con il punteggio più alto (voti meno voti bassi).
Se la tua lingua ha l'altra forma di for
loop, ma sei sicuro, puoi creare qualcosa di interessante con esso, sentiti libero di pubblicare la risposta e contrassegnarla come non competitiva. Mi riservo il diritto di ampliare l'ambito delle costruzioni e dei linguaggi disponibili, ma non sarà mai ridotto, quindi non abbiate paura di abbandonare soluzioni precedentemente corrette.
Qual è la soluzione?
La soluzione è composta da due programmi.
Il primo programma è un programma pulito . È il tipico programma nella tua lingua con il for
ciclo che fa 8 iterazioni. Dovrebbe essere il normale programma, qualsiasi sviluppatore potrebbe scrivere. Nessun hack speciale per scopi di preparazione. Per esempio:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Il secondo programma è aumentato. Questo programma dovrebbe contenere tutto il codice del programma pulito e alcuni codici aggiuntivi. Esistono un numero limitato di punti di estensione, vedere la sezione completa delle regole per i dettagli. Può essere un programma aumentato per quello pulito sopra
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Questo è solo un esempio (non compilabile in C ++) per mostrare un'idea. Il vero programma aumentato corretto deve essere compilabile, funzionante e con loop infinito.
Regole complete
Entrambi i programmi:
- Qualsiasi lingua con supporto di tali
for
loop è ok. - Il corpo del loop deve essere vuoto. Più precisamente, è possibile inserire un output o altro codice nel loop, ma il comportamento del loop dovrebbe essere lo stesso in caso di loop vuoto.
Programma pulito:
Il ciclo utilizza un contatore intero o numerico ed esegue 8 iterazioni:
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++
I tipi definiti dall'utente non sono consentiti.
- L'uso della proprietà (ad eccezione della variabile globale) invece della variabile loop non è consentito.
La dichiarazione della variabile può essere all'interno o all'esterno del ciclo. Il seguente codice è ok:
int x; for(x=0; x<8; ++x);
È possibile utilizzare l'incremento del prefisso o del postfisso.
Il limite di loop
8
deve essere scritto come costante letterale senza salvare nella costante o variabile denominata. È fatto per prevenire soluzioni basate sulla dichiarazione di variabile o costante uguale a 8, e quindi riassegnandola, sovrascrivendola o oscurandola con l'altro valore:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Programma aumentato:
- Deve contenere tutto il codice da quello pulito.
- Dovrebbe estendere il programma pulito in un numero limitato di punti di estensione.
- Deve eseguire lo stesso
for
loop di un loop infinito stesso.
Il posizionamento del loop in un'altra costruzione infinita non è corretto. - Il runtime o il patching in fase di compilazione del codice sono consentiti purché la rappresentazione testuale di esso sia invariata.
- Non
eval
è consentito posizionare la costruzione in una stringa e passare a .
Punti di estensione:
- Ovunque al di fuori del frammento con codice pulito, inclusi altri file o altri assembly.
for
dichiarazione (come pezzo unico -for
costruzione e il suo corpo) deve essere mantenuto invariato.- La dichiarazione delle variabili deve essere mantenuta invariata.
- Qualsiasi punto tra semplici istruzioni può essere utilizzato come punto di estensione.
- Se e solo se la variabile è stata dichiarata al di fuori del ciclo e senza assegnazione immediata del valore, è possibile aggiungere tale assegnazione.
/* 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: se possibile, si prega di fornire un collegamento all'IDE online.
java.lang.Integer
? 2. Questo sarebbe meglio con un criterio vincente adeguato.