Jetons un coup d'œil à une boucle typique, qui effectue généralement 8 itérations:
for (int x=0; x<8; ++x);
Vous devez le rendre infini!
C'est un concours de popularité pour toutes les langues qui prennent en charge une telle forme de for
boucle. Ainsi, la solution avec le score le plus élevé (votes positifs moins votes négatifs) gagne.
Si votre langue a l'autre forme de for
boucle, mais vous êtes sûr, vous pouvez faire quelque chose de cool avec elle, n'hésitez pas à poster la réponse et à la marquer comme non compétitive. Je me réserve le droit d'élargir la portée des constructions et des langages disponibles, mais il ne sera jamais réduit, alors n'ayez pas peur de laisser tomber des solutions précédemment correctes.
Quelle est la solution?
La solution se compose de deux programmes.
Le premier programme est un programme propre . C'est le programme typique de votre langue avec la for
boucle faisant 8 itérations. Ce devrait être le programme normal, n'importe quel développeur pourrait écrire. Pas de hacks spéciaux à des fins de préparation. Par exemple:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Le deuxième programme est augmenté. Ce programme doit contenir tout le code du programme propre et du code supplémentaire. Le nombre de points d'extension est limité , voir la section complète des règles pour plus de détails. Un programme augmenté pour le propre ci-dessus peut être
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
C'est juste un exemple (non compilable en C ++) pour montrer une idée. Le vrai programme augmenté correct doit être compilable, fonctionner et avoir une boucle infinie.
Règles complètes
Les deux programmes:
- Toute langue prenant en charge de telles
for
boucles est correcte. - Le corps de la boucle doit être vide. Plus précisément, vous pouvez placer une sortie ou un autre code dans la boucle, mais le comportement de la boucle doit être le même en cas de boucle vide.
Programme propre:
La boucle utilise un compteur entier ou numérique et effectue 8 itérations:
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++
Les types définis par l'utilisateur ne sont pas autorisés.
- L'utilisation de la propriété (à l'exception de la variable globale) au lieu de la variable de boucle est interdite.
La déclaration de variable peut être à l'intérieur ou à l'extérieur de la boucle. Le code suivant est correct:
int x; for(x=0; x<8; ++x);
L'incrément de préfixe ou de postfixe peut être utilisé.
La limite de boucle
8
doit être écrite comme un littéral constant sans être sauvegardée dans une constante ou une variable nommée. Il est fait pour empêcher les solutions basées sur la déclaration d'une variable ou d'une constante égale à 8, puis la réaffectation, la substitution ou l'observation par l'autre valeur:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Programme augmenté:
- Doit contenir tout le code du code propre.
- Devrait étendre le programme propre dans un nombre limité de points d'extension.
- Doit exécuter la même
for
boucle qu'une boucle infinie elle-même.
Placer la boucle dans une autre construction infinie n'est pas correct. - La correction à l'exécution ou à la compilation du code est autorisée tant que sa représentation textuelle est inchangée.
- Placer la construction dans une chaîne et passer à
eval
n'est pas autorisé.
Points d'extension:
- N'importe où en dehors du fragment avec du code propre, y compris d'autres fichiers ou autres assemblys.
for
déclaration (en une seule pièce -for
construction et son corps) doit rester inchangée.- La déclaration de variable doit rester la même.
- N'importe quel endroit entre des instructions simples peut être utilisé comme point d'extension.
- Si et seulement si la variable a été déclarée en dehors de la boucle et sans affectation immédiate de la valeur, une telle affectation peut être ajoutée.
/* 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: Si possible, veuillez fournir un lien vers l'IDE en ligne.
java.lang.Integer
? 2. Ce serait mieux avec un critère de victoire approprié.