C #, 174 172 147 bytes
Economizou 25 bytes "emprestando" algumas idéias da resposta C # do raznagul e mesclando-as com a soma do primeiro truque dos números n!
Economizou 2 bytes usando o truque da soma dos primeiros n números para uma perda de precisão de 185 milissegundos.
class P{static void Main(){for(int i=1;;){System.Console.WriteLine(i++<731?"Not ready yet":"Eat your hot dog");System.Threading.Thread.Sleep(i);}}}
Programa não destruído:
class P
{
static void Main()
{
for (int i=1;;)
{
System.Console.WriteLine( i++ < 731 ? "Not ready yet" : "Eat your hot dog");
System.Threading.Thread.Sleep(i);
}
}
}
Explicação:
Como o tempo total de espera é codificado em 267 segundos, pode-se considerar esse número como uma soma telescópica dos primeiros n números naturais, n * (n + 1) / 2
, que devem ser iguais a 267000 milissegundos.
Isso é equivalente a n^2 + n - 534000 = 0
.
Ao resolver esta equação de segunda ordem, n1 = 730.2532073142067
, n2 = -n1
. Obviamente, apenas a solução positiva é aceita e pode ser aproximada como 730 .
O tempo total pode ser calculado como 730 * (730 + 1) / 2 = 266815 milliseconds
. A imprecisão é de 185 milissegundos , imperceptível aos seres humanos. O código agora fará com que o encadeamento principal (e somente) seja suspenso por 1 milissegundo, 2 milissegundos e assim por diante até 730, portanto o período total de suspensão é de ~ 267 segundos.
Atualizar:
A lógica do programa pode ser simplificada ainda mais - basicamente, ele precisa exibir continuamente uma mensagem e aguardar um tempo especificado até mudar para a segunda mensagem.
A mensagem pode ser alterada usando um operador ternário para verificar a passagem do tempo especificado (~ 267 segundos).
O aspecto do tempo é controlado usando um contador crescente e pausando o encadeamento de execução.
No entanto, como a variável do contador continua aumentando indefinidamente, sem condições para verificar seu valor, pode-se esperar um estouro de número inteiro em algum momento, quando a mensagem reverter para Not ready yet
.
Uma condição pode ser adicionada para detectar e atenuar o problema, atribuindo um valor positivo maior que 730 quando o estouro ocorrer - como i=i<1?731:i
dentro do for
loop. Infelizmente, tem o custo de 11 bytes adicionais:
class P{static void Main(){for(int i=1;;i=i<1?731:i){System.Console.Write(i++<731?"\nNot ready yet":"\nEat your hot dog");System.Threading.Thread.Sleep(i);}}}
A chave aqui é usar o valor do contador em milissegundos para atrasar bastante o momento do estouro.
O tempo até o estouro pode ser calculado de acordo com a sum(1..n)
fórmula, em que n = o valor inteiro máximo assinado de 32 bits em C # (e na estrutura .NET) ou 2 ^ 31 - 1 = 2147483647:
2 147 483 647 * 2 147 483 648 / 2 = 2,305843008 x 10^18 milliseconds = 2,305843008 x 10^15 seconds = 26 687 997 779 days = ~73 067 755 years
Depois de 73 milhões de anos , pode não importar se uma falha no sistema aparecer - o cachorro-quente, o OP com fome e talvez a própria raça humana já se foi há muito tempo.
Versão anterior (172 bytes):
namespace System{class P{static void Main(){for(int i=1;i<731;){Console.Write("\nNot ready yet");Threading.Thread.Sleep(i++);}for(;;)Console.Write("\nEat your hot dog");}}}
Programa não destruído:
namespace System
{
class P
{
static void Main()
{
for (int i = 1; i < 731; )
{
Console.Write("\nNot ready yet");
Threading.Thread.Sleep(i++);
}
for ( ; ; )
Console.Write("\nEat your hot dog");
}
}
}
Versão anterior (174 bytes):
namespace System{class P{static void Main(){for(int i=0;i++<267e3;){Console.Write("\nNot ready yet");Threading.Thread.Sleep(1);}for(;;)Console.Write("\nEat your hot dog");}}}
Programa não destruído:
namespace System
{
class P
{
static void Main()
{
for (int i=0; i++ < 267e3; )
{
Console.Write("\nNot ready yet");
Threading.Thread.Sleep(1);
}
for ( ; ; )
Console.Write("\nEat your hot dog");
}
}
}
Como alternativa, o programa pode ser exibido Not ready yet
apenas uma vez, aguarde até que o tempo especificado termine e depois saiaEat your hot dog
substituindo a mensagem anterior, sendo alguns bytes mais curtos:
C #, 145 bytes
namespace System{class P{static void Main(){Console.Write("Not ready yet");Threading.Thread.Sleep(267000);Console.Write("\rEat your hot dog");}}}
Programa não destruído:
namespace System
{
class P
{
static void Main()
{
Console.Write("Not ready yet");
Threading.Thread.Sleep(267000);
Console.Write("\rEat your hot dog");
}
}
}