जैसा कि हम सभी जानते हैं कि आधुनिक ऑपरेटिंग सिस्टम में थ्रेड शेड्यूलर होते हैं जो आंतरिक तर्क के आधार पर आपके थ्रेड को शेड्यूल करने के लिए अलग-अलग ऑर्डर ले सकते हैं जो कि आपके कोड के लिए निजी नहीं है। आम तौर पर आप अपने मल्टीथ्रेडेड कोड को आर्किटेक्ट करते हैं ताकि यह सुनिश्चित किया जा सके कि आपके द्वारा लगाया गया यह नॉनटर्मिनिज्म सार्थक रूप से आपके आउटपुट को प्रभावित नहीं करता है।
यहां लक्ष्य विपरीत है। एक प्रोग्राम का निर्माण करें जो पूर्णांक को अंतराल [0,99] में प्रिंट करता है, लेकिन एक क्रम में जो ओएस थ्रेड शेड्यूलर के कारण रन से चलाने के लिए अलग-अलग होगा।
आपको "पर्याप्त नॉनडेर्मिनिज़्म" प्राप्त करना होगा, जिसे इस प्रकार परिभाषित किया गया है:
10 परीक्षणों के 10 अनुक्रमिक सेटों में आपके कार्यक्रम को प्रत्येक परीक्षण के भीतर कम से कम 9 अद्वितीय क्रमपरिवर्तन का उत्पादन करना चाहिए। आपके पास लगातार 10 के दोनों तरफ परीक्षणों के असफल सेटों की एक उचित संख्या हो सकती है जो सफल होते हैं।
या, इसे दूसरे तरीके से रखने के लिए, आपको अपने कार्यक्रम के 100 रनों की आवश्यकता होती है, जहां 10 रनों के प्रत्येक ब्लॉक में अधिकतम दो रन होते हैं जो एक ही चीज़ का उत्पादन करते हैं।
इसलिए, कभी-कभी 98 और 99 की अदला-बदली होती है।
यह एक कोड-गोल्फ है , इसलिए इसका उत्तर जो सबसे कम बाइट्स जीतता है।
ज़रा सी बात
- अपने आउटपुट को स्टैडआउट में लिखें, प्रति पंक्ति एक प्रविष्टि
- यदि आप दो थ्रेड्स के माध्यम से प्रारूप को नियंत्रित करते हैं तो इंटरलेव चरित्र stdout को (यहां तक कि कभी-कभी) लिखते हैं जिसके परिणामस्वरूप तीन अंकों की संख्या या खाली लाइनें जैसी चीजें होती हैं, आपका परिणाम अमान्य है
- उपरोक्त नियम का एकमात्र अपवाद यह है कि अंतिम आवश्यक संख्या को प्रिंट करने के बाद आप एक खाली लाइन का उत्सर्जन कर सकते हैं (आपका स्वागत है)
- यदि आप कभी भी किसी भी आवश्यक मूल्यों को याद या डुप्लिकेट करते हैं तो आपका परिणाम अमान्य है
- आपके कार्यक्रम को एक ही कोर प्रोसेसर पर (हालांकि कुडोस अगर ऐसा है तो) nondeterministic होने की आवश्यकता नहीं है
- आपका कार्यक्रम हरे रंग के धागे / फाइबर का उपयोग कर सकता है जो वास्तव में ओएस कर्नेल द्वारा प्रबंधित नहीं किया जाता है यदि यह अभी भी चुनौती की अन्य आवश्यकताओं को पूरा करता है और थ्रेडिंग सिस्टम आपकी भाषा का हिस्सा है या आपकी भाषा के लिए मानक पुस्तकालय
- आपके प्रोग्राम के लिए रनटाइम को आधुनिक प्रोसेसर पर 5 सेकंड के तहत मज़बूती से होना चाहिए
- आपको अपने प्रोग्राम के बाहर होने वाले वातावरण जैसे परिवर्तन की प्रतीक्षा करने या सेटिंग्स में परिवर्तन करने के लिए नहीं मिलता है; आपके कार्यक्रम को पास होना चाहिए कि क्या 100 बार बार बैक टू बैक या प्रत्येक रन के बीच में एक घंटे के साथ या 100 बार समानांतर में होगा (जो कि वास्तव में होगा ...)
- आप कार्यों के लिए GPU या Xeon Phi और अपने स्वयं के आंतरिक शेड्यूलिंग तंत्र जैसे एक कॉपीप्रोसेसर का उपयोग कर सकते हैं। नियम उसी तरह से लागू होते हैं जिस तरह वे हरे धागे पर लागू होते हैं।
- जब तक आप इस पद के नियमों का पालन करते हैं, तब तक सभी प्रकार की नींद, पैदावार और अन्य चाल के साथ अनुसूचक को भड़काने के लिए स्वतंत्र महसूस करें
संचालन पर प्रतिबंध लगा दिया
नॉनडेटर्मिनिज़्म का एकमात्र स्रोत जिस पर आपको आकर्षित करने की अनुमति है, जब शेड्यूलर आपके थ्रेड को चलाने के लिए शेड्यूल करता है। निम्नलिखित सूची संपूर्ण नहीं है, केवल उन चीज़ों के उदाहरण प्रदान करने के लिए जिन्हें आप करने की अनुमति नहीं है क्योंकि वे नोंदेर्मेरिनिज़्म के अन्य स्रोतों को स्वीकार करते हैं।
- किसी भी प्रकार की PRNG या हार्डवेयर RNG क्षमता का प्रत्यक्ष या अप्रत्यक्ष रूप से उपयोग करना (जब तक कि यह अनुसूचक के निहित भाग के रूप में नहीं है)।
- किसी भी तरह के इनपुट (सिस्टम समय, फाइल सिस्टम, नेटवर्क, आदि) में पढ़ना
- थ्रेड आईडी या प्रोसेस आईडी पढ़ना
- ओएस अनुसूचक को अनुकूलित करना; आपको एक मुख्यधारा ओएस से एक मानक ओएस अनुसूचक का उपयोग करना चाहिए
- अपने हरे धागे / फाइबर अनुसूचक को अनुकूलित करना भी निषिद्ध है। इसका मतलब है कि यदि आप इस चुनौती के लिए भाषा लिखते हैं तो आपको ओएस थ्रेड का उपयोग करना होगा ।
उत्तर मान्यता
अधिमानतः एक उत्तर सभी सामान्य ओएस और आधुनिक प्रोसेसर पर काम करेगा, जिसमें कुडोस को समर्थन की चौड़ाई के आनुपातिक रूप से सम्मानित किया जाएगा। हालाँकि, यह चुनौती की आवश्यकता नहीं है। कम से कम एक उत्तर में एक आधुनिक एसएमपी प्रोसेसर और आधुनिक ओएस का समर्थन करना चाहिए। मैं अपनी हार्डवेयर उपलब्धता की सीमा तक प्रमुख उत्तरों का परीक्षण करूँगा।
- यदि आपकी प्रविष्टि विंडोज 10 v1607 x64 पर चलने वाले i7 5960x पर आवश्यक आउटपुट नहीं देगी, तो आवश्यक पर्यावरण निर्दिष्ट करें
- यदि यह ऐसा कुछ है जिसे मैं VMWare वर्कस्टेशन के साथ आसानी से पुन: पेश कर सकता हूं, तो सटीक ओएस और वीएम चश्मा प्रदान करें
- यदि यह उन स्थितियों में से किसी में भी उत्पादन नहीं किया जा सकता है, तो हेडर सेक्शन में वर्णित परीक्षण की एक साथ स्क्रीन कैप्चर रिकॉर्ड करें और अपने माउस और कीबोर्ड इंटरैक्शन (या जो भी नियंत्रण योजना आपकी गैर-अभिकलन संगणना है) के साथ आपकी स्क्रीन की एक हैंडहेल्ड वीडियो रिकॉर्डिंग करें। डिवाइस का उपयोग करता है) स्पष्ट रूप से दिखाई देता है और अपने उत्तर के साथ दोनों वीडियो पोस्ट करता है और इसमें यह व्याख्या करता है कि यह क्यों काम करता है
- वैकल्पिक रूप से, एक प्रतिष्ठित लंबे समय से स्थायी उपयोगकर्ता (जो आप नहीं हैं) को परिणाम के लिए पुन: उत्पन्न करने के लिए मेल खाते हार्डवेयर के साथ और आपके लिए वाउचर प्राप्त करें
- यदि आपकी प्रविष्टि एक विदेशी प्रोग्रामिंग भाषा में है, जो सेटअप निर्देशों को संकलित / जिट / व्याख्या करने के लिए एक विशिष्ट डेवलपर स्थापित नहीं किया जाएगा
- यदि आप प्रवेश JVM / Python दुभाषिया / अन्य के एक विशिष्ट संस्करण पर निर्भर करते हैं, तो निर्दिष्ट करें
- अगर मेरे परीक्षण में आपके 10 सफल अनुक्रमिक सेट प्राप्त करने के लिए 10 मिनट से अधिक समय तक बैक-टू-बैक रन लेता है, तो आप असफल हो जाते हैं (इसलिए सफलता की स्थिति एक सनकी घटना न होने दें, खासकर यदि आप ऊपरी के पास हों रनटाइम बाउंड)