सी #, 174 172 147 बाइट्स
Raznagul के C # उत्तर से कुछ विचारों को "उधार" करके 25 बाइट्स सहेजे और उन्हें पहले n संख्या चाल के योग के साथ मिला दिया!
185 मिलीसेकंड की शुद्धता के नुकसान के लिए पहले n संख्या चाल के योग का उपयोग करके 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 * (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
पर for
लूप के अंदर - जैसे 730 से अधिक सकारात्मक मूल्य बताकर समस्या का पता लगाने और इसे कम करने के लिए एक शर्त जोड़ी जा सकती है । अफसोस की बात है, यह 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)
सूत्र के अनुसार की जा सकती है, जहाँ n = C # (और .NET .NET फ्रेमवर्क) में अधिकतम 32-बिट हस्ताक्षरित पूर्णांक मान या 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
73 मिलियन वर्षों के बाद , इससे कोई फर्क नहीं पड़ता कि सिस्टम में गड़बड़ दिखाई देती है - हॉट डॉग, भूखा ओपी और शायद मानव जाति खुद लंबे समय तक चले गए।
पिछला संस्करण (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");
}
}
}