Vamos dar uma olhada em um loop típico, que geralmente realiza 8 iterações:
for (int x=0; x<8; ++x);
Você tem que torná-lo infinito!
É um concurso de popularidade para todos os idiomas que suportam essa forma de for
loop. Portanto, a solução com a pontuação mais alta (upvotes menos downvotes) vence.
Se o seu idioma tiver outra forma de for
loop, mas você tem certeza, pode fazer algo interessante com ele, sinta-se à vontade para postar a resposta e marcá-la como não-concorrente. Reservo-me o direito de ampliar o escopo das construções e idiomas disponíveis, mas isso nunca será reduzido, portanto, não tenha medo de descartar as soluções anteriormente corretas.
O que é solução?
A solução consiste em dois programas.
O primeiro programa é um programa limpo . É o programa típico em seu idioma, com o for
loop fazendo 8 iterações. Deve ser o programa normal, qualquer desenvolvedor pode escrever. Não há hacks especiais para fins de preparação. Por exemplo:
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
O segundo programa é aumentado. Este programa deve conter todo o código do programa limpo e algum código adicional. Há um número limitado de pontos de extensão; consulte a seção de regras completas para obter detalhes. Um programa aumentado para o programa limpo acima pode ser
inline bool operator < (const int &a, const int &b)
{
return true;
}
int main()
{
for (int x=0; x<8; ++x);
return 0;
}
Esse é apenas um exemplo (não compilável em C ++) para mostrar uma ideia. O verdadeiro programa aumentado correto deve ser compilável, funcionando e possuindo loop infinito.
Regras completas
Ambos os programas:
- Qualquer idioma com suporte para esses
for
loops está ok. - O corpo do loop deve estar vazio. Mais precisamente, você pode colocar alguma saída ou outro código no loop, mas o comportamento do loop deve ser o mesmo no caso de loop vazio.
Programa limpo:
O loop usa contador inteiro ou numérico e executa 8 iterações:
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++
Tipos definidos pelo usuário não são permitidos.
- O uso da propriedade (exceto da variável global) em vez da variável de loop não é permitido.
A declaração da variável pode estar dentro ou fora do loop. O código a seguir está ok:
int x; for(x=0; x<8; ++x);
É possível usar o incremento de prefixo ou postfix.
O limite do loop
8
deve ser gravado como um literal constante sem salvar na constante ou variável nomeada. Foi criado para impedir soluções baseadas em declarar variável ou constante igual a 8 e, em seguida, reatribuir, substituir ou sombrear pelo outro valor:const double n = 8; int main() { const double n = 9007199254740992; for (double x=0; x<n; ++x); return 0; }
Programa aumentado:
- Deve conter todo o código do código limpo.
- Deve estender o programa limpo em um número limitado de pontos de extensão.
- Deve executar o mesmo
for
loop que um loop infinito em si.
Colocar o loop em outra construção infinita não é bom. - O patch em tempo de execução ou em tempo de compilação do código é permitido desde que a representação textual dele seja inalterada.
- Colocar a construção em uma string e passar para
eval
não é permitido.
Pontos de extensão:
- Em qualquer lugar fora do fragmento com código limpo, incluindo outros arquivos ou outros assemblies.
for
A declaração (como peça única -for
construção e seu corpo) deve ser mantida inalterada.- A declaração variável deve ser mantida igual.
- Qualquer lugar entre instruções simples pode ser usado como ponto de extensão.
- Se e somente se a variável foi declarada fora do loop e sem atribuição imediata do valor, essa atribuição pode ser adicionada.
/* 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 possível, forneça um link para o IDE online.
java.lang.Integer
? 2. Isso seria melhor com um critério de vitória adequado.