C #, 174 172 147 bytes
¡Ahorré 25 bytes al "tomar prestadas" algunas ideas de la respuesta C # de raznagul y fusionarlas con la suma del primer truco de n números!
Ahorró 2 bytes usando la suma del primer truco de n números para una pérdida de precisión de 185 milisegundos.
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 sin golf:
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);
}
}
}
Explicación:
Dado que el tiempo total de espera está codificado en 267 segundos, se puede considerar este número como una suma telescópica de los primeros n números naturales n * (n + 1) / 2
, que debe ser igual a 267000 milisegundos.
Esto es equivalente a n^2 + n - 534000 = 0
.
Al resolver esta ecuación de segundo orden, n1 = 730.2532073142067
, n2 = -n1
. Por supuesto, solo se acepta la solución positiva y se puede aproximar a 730 .
El tiempo total se puede calcular como 730 * (730 + 1) / 2 = 266815 milliseconds
. La imprecisión es de 185 milisegundos , imperceptible para los humanos. El código ahora hará que el subproceso principal (y solo) duerma durante 1 milisegundo, 2 milisegundos y así sucesivamente hasta 730, por lo que el período de suspensión total es de ~ 267 segundos.
Actualizar:
La lógica del programa se puede simplificar aún más: básicamente, debe mostrar continuamente un mensaje y esperar un tiempo específico hasta cambiar al segundo mensaje.
El mensaje se puede cambiar utilizando un operador ternario para verificar el paso del tiempo especificado (~ 267 segundos).
El aspecto del tiempo se controla utilizando un contador creciente y pausando el hilo de ejecución.
Sin embargo, dado que la variable de contador continúa aumentando indefinidamente sin ninguna condición para verificar su valor, uno puede esperar un desbordamiento de enteros en algún momento, cuando el mensaje vuelve a Not ready yet
.
Se puede agregar una condición para detectar y mitigar el problema asignando un valor positivo mayor que 730 cuando se produce el desbordamiento, como i=i<1?731:i
dentro del for
bucle. Lamentablemente, tiene un costo de 11 bytes adicionales:
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);}}}
La clave aquí es usar el valor del contador en milisegundos para retrasar en gran medida el momento de desbordamiento.
El tiempo hasta el desbordamiento se puede calcular de acuerdo con la sum(1..n)
fórmula, donde n = el valor entero máximo de 32 bits con signo en C # (y el marco .NET) o 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
Después de 73 millones de años , podría no importar si aparece una falla en el sistema: el perro caliente, el OP hambriento y tal vez la raza humana en sí se han ido.
Versión 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 sin golf:
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");
}
}
}
Versión 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 sin golf:
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");
}
}
}
Alternativamente, el programa puede mostrarse Not ready yet
solo una vez, esperar hasta que termine el tiempo especificado y luego emitir Eat your hot dog
sobrescribiendo el mensaje anterior mientras se acortan bastantes bytes:
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 sin golf:
namespace System
{
class P
{
static void Main()
{
Console.Write("Not ready yet");
Threading.Thread.Sleep(267000);
Console.Write("\rEat your hot dog");
}
}
}