C #, 174 172 147 byte
Disimpan 25 byte dengan "meminjam" beberapa ide dari jawaban C # raznagul dan menggabungkannya dengan jumlah trik nomor n pertama!
Disimpan 2 byte dengan menggunakan jumlah trik nomor n pertama karena kehilangan presisi 185 milidetik.
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);}}}
Program tidak digabungkan:
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);
}
}
}
Penjelasan:
Karena total waktu untuk menunggu dikodekan pada 267 detik, orang dapat menganggap angka ini sebagai jumlah teleskopik dari n angka pertama, n * (n + 1) / 2
, yang harus sama dengan 267000 milidetik.
Ini setara dengan n^2 + n - 534000 = 0
.
Dengan memecahkan persamaan orde kedua ini n1 = 730.2532073142067
,, n2 = -n1
. Tentu saja, hanya solusi positif yang diterima dan dapat diperkirakan 730 .
Total waktu dapat dihitung sebagai 730 * (730 + 1) / 2 = 266815 milliseconds
. Kesalahannya adalah 185 milidetik , tidak terlihat oleh manusia. Kode sekarang akan membuat utas utama (dan hanya) tidur selama 1 milidetik, 2 milidetik dan seterusnya hingga 730, sehingga total periode tidur adalah ~ 267 detik.
Memperbarui:
Logika program dapat disederhanakan lebih lanjut - pada dasarnya perlu untuk terus menampilkan pesan dan menunggu waktu yang ditentukan sampai beralih ke pesan kedua.
Pesan dapat diubah dengan menggunakan operator ternary untuk memeriksa berlalunya waktu yang ditentukan (~ 267 detik).
Aspek waktu dikontrol dengan menggunakan penghitung yang meningkat dan menjeda utas eksekusi.
Namun, karena variabel penghitung terus meningkat tanpa batas tanpa syarat untuk memeriksa nilainya, orang dapat mengharapkan bilangan bulat bilangan bulat di beberapa titik, ketika pesan kembali ke Not ready yet
.
Suatu kondisi dapat ditambahkan untuk mendeteksi dan mengurangi masalah dengan menetapkan nilai positif lebih besar dari 730 ketika terjadi overflow - seperti i=i<1?731:i
di dalam for
loop. Sayangnya, itu datang dengan biaya 11 byte tambahan:
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);}}}
Kuncinya di sini adalah menggunakan nilai penghitung dalam milidetik untuk sangat menunda momen overflow.
Waktu hingga overflow dapat dihitung sesuai dengan sum(1..n)
rumus, di mana n = nilai integer maksimum yang ditandatangani 32-bit dalam C # (dan kerangka .NET) atau 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
Setelah 73 juta tahun , mungkin tidak masalah jika muncul kesalahan dalam sistem - hot dog, OP yang lapar, dan mungkin ras manusia itu sendiri sudah lama hilang.
Versi sebelumnya (172 byte):
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");}}}
Program tidak digabungkan:
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 sebelumnya (174 byte):
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");}}}
Program tidak digabungkan:
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");
}
}
}
Atau, program Not ready yet
hanya dapat menampilkan sekali, tunggu sampai waktu yang ditentukan selesai dan kemudian outputEat your hot dog
dengan menimpa pesan sebelumnya sementara beberapa byte lebih pendek:
C #, 145 byte
namespace System{class P{static void Main(){Console.Write("Not ready yet");Threading.Thread.Sleep(267000);Console.Write("\rEat your hot dog");}}}
Program tidak digabungkan:
namespace System
{
class P
{
static void Main()
{
Console.Write("Not ready yet");
Threading.Thread.Sleep(267000);
Console.Write("\rEat your hot dog");
}
}
}