Echemos un vistazo a un bucle típico, que generalmente realiza 8 iteraciones:
for (int x=0; x<8; ++x);
¡Tienes que hacerlo infinito!
Es un concurso de popularidad para todos los idiomas que admiten esa forma de for
bucle. Entonces, la solución con la puntuación más alta (votos positivos menos votos negativos) gana.
Si su idioma tiene la otra forma de for
bucle, pero está seguro, puede hacer algo genial con él, no dude en publicar la respuesta y marcarla como no competitiva. Me reservo el derecho de ampliar el alcance de las construcciones e idiomas disponibles, pero nunca se reducirá, así que no tenga miedo de descartar soluciones previamente correctas.
¿Qué es la solución?
La solución consta de dos programas.
El primer programa es un programa limpio . Es el programa típico en su idioma con el for
ciclo que hace 8 iteraciones. Debería ser el programa normal, cualquier desarrollador podría escribir. No hay hacks especiales para fines de preparación. Por ejemplo:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
El segundo programa se aumenta. Este programa debe contener todo el código del programa limpio y algún código adicional. Hay un número limitado de puntos de extensión, vea la sección de reglas completas para más detalles. Un programa aumentado para el limpio de arriba puede ser
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Eso es solo un ejemplo (no compatible en C ++) para mostrar una idea. El programa real correcto aumentado tiene que ser compilable, funcionar y tener bucle infinito.
Reglas completas
Ambos programas:
- Cualquier lenguaje con soporte de tales
for
bucles está bien. - El cuerpo del bucle debe estar vacío. Más precisamente, puede colocar alguna salida u otro código en el bucle, pero el comportamiento del bucle debe ser el mismo en caso de bucle vacío.
Programa limpio:
Loop usa un entero o un contador numérico y realiza 8 iteraciones:
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++
Los tipos definidos por el usuario no están permitidos.
- El uso de la propiedad (excepto la variable global) en lugar de la variable de bucle no está permitido.
La declaración de variable puede estar dentro o fuera del bucle. El siguiente código está bien:
int x; for(x=0; x<8; ++x);
Se puede usar el incremento de prefijo o postfix.
El límite de bucle
8
debe escribirse como un literal constante sin guardarlo en una constante o variable nombrada. Está hecho para evitar soluciones basadas en declarar variable o constante igual a 8, y luego reasignarlo, anularlo o sombrearlo por el otro valor:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Programa aumentado:
- Debe contener todo el código del limpio.
- Debe extender el programa limpio en un número limitado de puntos de extensión.
- Debe ejecutar el mismo
for
bucle que un bucle infinito.
Colocar el bucle en otra construcción infinita no está bien. - El parche en tiempo de ejecución o en tiempo de compilación del código está permitido siempre que la representación textual del mismo no se modifique.
- Colocar la construcción en una cuerda y pasar a
eval
no está permitido.
Puntos de extensión:
- En cualquier lugar fuera del fragmento con código limpio, incluidos otros archivos u otros ensamblados.
for
declaración (como pieza única -for
construcción y su cuerpo) debe mantenerse sin cambios.- La declaración variable debe mantenerse igual.
- Cualquier lugar entre declaraciones simples puede usarse como punto de extensión.
- Si y solo si la variable se declaró fuera del ciclo y sin una asignación inmediata del valor, dicha asignación se puede agregar.
/* 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;
}
PD: Si es posible, proporcione un enlace a IDE en línea.
java.lang.Integer
? 2. Esto sería mejor con un criterio ganador adecuado.