সি #, 174 172 147 বাইট
রাজনগুলের সি # উত্তর থেকে কিছু ধার "ধার করে" 25 বাইট সংরক্ষণ করা হয়েছে প্রথম সংখ্যাটির যোগফলের যোগফল দিয়ে!
185 মিলি সেকেন্ডের যথার্থতা হ্রাসের জন্য প্রথম এন সংখ্যা ট্রিকের যোগফল ব্যবহার করে 2 বাইট সংরক্ষণ করা হয়েছে।
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);}}}
অসম্পূর্ণ প্রোগ্রাম:
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);
}
}
}
ব্যাখ্যা:
যেহেতু অপেক্ষা করার মোট সময়টি 267 সেকেন্ডে হার্ডকোড করা হয়, তাই কেউ এই সংখ্যাটিকে প্রথম এন প্রাকৃতিক সংখ্যার একটি দূরবীনসংখ্যা হিসাবে বিবেচনা করতে পারে, n * (n + 1) / 2 , যা 267000 মিলিসেকেন্ডের সমান হতে হবে।
এটি সমান n^2 + n - 534000 = 0 ।
এই দ্বিতীয় ক্রম সমীকরণটি সমাধান করে n1 = 730.2532073142067,, n2 = -n1। অবশ্যই, শুধুমাত্র ইতিবাচক সমাধানটি গৃহীত হবে এবং এটি 730 হিসাবে প্রায় অনুমোদিত হতে পারে ।
মোট সময় হিসাবে গণনা করা যেতে পারে 730 * (730 + 1) / 2 = 266815 milliseconds। ছদ্মবেশটি 185 মিলি সেকেন্ড সেকেন্ড, মানুষের কাছে দুর্ভেদ্য। কোডটি এখন মূল (এবং কেবলমাত্র) থ্রেডকে 1 মিলিসেকেন্ড, 2 মিলি সেকেন্ড এবং 730 অবধি আপ করে দেবে, সুতরাং মোট ঘুমের সময়কাল ~ 267 সেকেন্ড।
হালনাগাদ:
প্রোগ্রামটির যুক্তি আরও সরল করা যায় - মূলত এটির বার্তা প্রদর্শন করা এবং দ্বিতীয় বার্তায় স্যুইচ না হওয়া পর্যন্ত একটি নির্দিষ্ট সময় অপেক্ষা করা দরকার।
নির্দিষ্ট সময় (~ 267 সেকেন্ড) কেটে যাওয়া পরীক্ষা করতে কোনও বার্তা অপারেটর ব্যবহার করে বার্তাটি পরিবর্তন করা যেতে পারে।
সময় বাড়ানোর দিকটি বর্ধমান কাউন্টার ব্যবহার করে এবং এক্সিকিউশন থ্রেডকে বিরতি দিয়ে নিয়ন্ত্রণ করা হয়।
তবে যেহেতু কাউন্টার ভেরিয়েবলটি তার মান পরীক্ষা করার জন্য কোনও শর্ত ছাড়াই অনির্দিষ্টকালের জন্য বাড়তে থাকে, তাই বার্তাটি আবার ফিরে গেলে যে কোনও সময় কোনও একটি পূর্ণসংখ্যার ওভারফ্লো আশা করতে পারে Not ready yet ।
লুপের i=i<1?731:iঅভ্যন্তরে যেমন ওভারফ্লো ঘটে তখন 30৩০ এর চেয়ে বেশি একটি ধনাত্মক মান নির্ধারণ করে সমস্যাটি শনাক্ত ও প্রশমিত করতে একটি শর্ত যুক্ত করা যেতে পারে for। দুঃখজনকভাবে, এটি 11 টি অতিরিক্ত বাইটের দামে আসে:
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);}}}
এখানে কীটি ওভারফ্লোয়ের মুহুর্তটিকে দারুণভাবে বিলম্ব করতে মিলিসেকেন্ডে পাল্টা মানটি ব্যবহার করছে ।
sum(1..n)সূত্র অনুযায়ী ওভারফ্লো পর্যন্ত সময় গণনা করা যায় , যেখানে সি = (এবং .NET ফ্রেমওয়ার্ক) বা 2 ^ 31 - 1 = 2147483647 এ সর্বাধিক 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার মান:
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
Million৩ মিলিয়ন বছর পরে , সিস্টেমে কোনও ত্রুটি দেখা দিলে তাতে কিছু আসে যায় না - হট ডগ, ক্ষুধার্ত ওপি এবং সম্ভবত মানব জাতি নিজেই দীর্ঘকাল চলে গেছে।
পূর্ববর্তী সংস্করণ (172 বাইট):
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");}}}
অসম্পূর্ণ প্রোগ্রাম:
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");
}
}
}
পূর্ববর্তী সংস্করণ (174 বাইট):
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");}}}
অসম্পূর্ণ প্রোগ্রাম:
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");
}
}
}
বিকল্পভাবে, প্রোগ্রামটি Not ready yetকেবল একবার প্রদর্শিত হতে পারে , নির্দিষ্ট সময় শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে এবং তারপরে Eat your hot dogবেশ কয়েকটি বাইট সংক্ষিপ্ত হওয়ার পরে পূর্ববর্তী বার্তাটি ওভাররাইট করে আউটপুট তৈরি করতে পারে :
সি #, 145 বাইট
namespace System{class P{static void Main(){Console.Write("Not ready yet");Threading.Thread.Sleep(267000);Console.Write("\rEat your hot dog");}}}
অসম্পূর্ণ প্রোগ্রাম:
namespace System
{
class P
{
static void Main()
{
Console.Write("Not ready yet");
Threading.Thread.Sleep(267000);
Console.Write("\rEat your hot dog");
}
}
}