इस टिप्पणी से प्रेरित ...
उपयोगकर्ताओं को धन्यवाद हेन , व्हीट-विजार्ड , और डेनिस को पोस्ट करने से पहले इस चुनौती के विनिर्देश को ठोस बनाने में मदद करने के लिए!
यह कॉप्स का धागा है। लुटेरों के धागे के लिए, यहां जाएं
में इस चुनौती , आप कुछ कोड यह है कि इतना है कि अपनी भाषा नहीं रह गया है एक प्रोग्रामिंग भाषा जा रहा है के बारे में हमारी मानदंडों को संतुष्ट चल करने का काम सौंपा गया है। उस चुनौती में, इसका मतलब है कि इसे बनाना ताकि भाषा अब और न हो ...
संख्यात्मक इनपुट और आउटपुट लें
दो संख्याओं को एक साथ जोड़ें
टेस्ट करें कि कोई निश्चित संख्या अभाज्य है या नहीं।
यह एक पुलिस और लुटेरों की चुनौती है, जहां दो अलग-अलग उद्देश्यों के साथ दो अलग-अलग चुनौतियां हैं: पुलिस कुछ कोड लिखने की कोशिश करेगी जो भाषा को अधिकतर अनुपयोगी बनाती है, और लुटेरे छिपे हुए वर्कअराउंड को खोजने की कोशिश करेंगे जो पुलिस को अनुमति देता है उनकी भाषा ठीक करने के लिए।
पुलिस वाले के रूप में, आपको कोड के दो स्निपेट लिखने होंगे:
एक जो आपकी भाषा को ज्यादातर अनुपयोगी बनाता है, जैसे कि इनपुट / आउटपुट और संख्यात्मक कार्यों को लेने के लिए अंतर्निहित कार्यों को हटाकर। जितनी अधिक सुविधाएँ आप निकालते हैं, उतना बेहतर है। इस कोड को क्रैश या बाहर निकलने की अनुमति नहीं है । इस स्निपेट के अंत में कोड जोड़ना संभव होना चाहिए, और उस कोड का मूल्यांकन किया जाएगा । तथा...
... कोड का एक स्निपेट जो इनपुट के रूप में दो गैर-नकारात्मक पूर्णांक लेता है, उन्हें एक साथ जोड़ता है, और उनकी राशि को आउटपुट करता है। पहला स्निपेट चलाने के बाद भी इस स्निपेट को सही ढंग से काम करना चाहिए। जब दो स्निपेट को एक साथ जोड़ दिया जाता है, तो उन्हें एक पूर्ण प्रोग्राम बनाना चाहिए जो दो नंबर जोड़ता है, या एक फ़ंक्शन को परिभाषित करता है जो दो नंबर जोड़ता है। आदर्श रूप में, इस स्निपेट को बहुत अस्पष्ट व्यवहार पर भरोसा करना चाहिए, ताकि खोजने में अधिक मुश्किल हो।
आप इनपुट और आउटपुट का कोई भी मानक तरीका चुन सकते हैं । हालाँकि, आपको यह अवश्य बताना चाहिए कि आप किस प्रारूप (इनपुट और आउटपुट) का उपयोग कर रहे हैं। जब तक वे आपके समान प्रारूप का उपयोग नहीं करते, तब तक एक डाकू आपके उत्तर को नहीं तोड़ सकता।
इन दोनों स्निपेट्स को लिखने के बाद, आपको पहले एक को उत्तर के रूप में पोस्ट करना होगा, दूसरे को प्रकट किए बिना। आपके उत्तर में निम्नलिखित जानकारी होनी चाहिए:
पहले स्निपेट (स्पष्ट रूप से नहीं सेकंड)।
भाषा (मामूली संस्करण सहित, क्योंकि अधिकांश प्रस्तुतियाँ शायद अजीब धार वाले मामलों पर भरोसा करेंगी)
IO प्रारूप, जिसमें यह एक फ़ंक्शन या पूर्ण कार्यक्रम भी शामिल है। लुटेरों को अपनी दरार के वैध होने के लिए उसी प्रारूप का उपयोग करना चाहिए ।
काम करने के लिए आपके उत्तर के लिए किसी भी अजीब बढ़त के मामलों की आवश्यकता है। उदाहरण के लिए, केवल लिनक्स पर चलता है , या इंटरनेट कनेक्शन की आवश्यकता होती है । जाहिर है, यह थोड़ा व्यक्तिपरक है, लेकिन अगर किसी पुलिस वाले के पास कोई चरम किनारे का मामला है जो इसे टूटने से रोकता है, और फिर केवल सुरक्षित होने के बाद यह पता चलता है, तो मैं इस खराब खेल कौशल पर विचार करता हूं। एक संभावित डाकू के पास आपके उत्तर को क्रैक करने से पहले आवश्यक सभी जानकारी होनी चाहिए ।
जब तक आपका जवाब सुरक्षित न हो, आपको अपनी बाइट गिनती प्रकट करने की आवश्यकता नहीं है।
यहाँ एक उदाहरण है। पहले स्निपेट के लिए, आप निम्नलिखित पायथन 3 कार्यक्रम प्रस्तुत कर सकते हैं:
अजगर ३
print=None
STDIN से इनपुट लेता है और आउटपुट से STDOUT में जाता है
और फिर अपने दूसरे स्निपेट के रूप में, आप लिख सकते हैं:
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
यह मान्य है क्योंकि यह इनपुट के रूप में दो नंबर लेगा, और यदि आप दो स्निपेट को एक साथ जोड़ते हैं, तो भी उनकी राशि का उत्पादन करते हैं
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
हालांकि, यह एक डाकू के लिए एक समाधान खोजने के लिए बेहद आसान होगा। चूंकि यह दरार करना बहुत आसान होगा, आप इस विशेष दृष्टिकोण को पैच करने का प्रयास कर सकते हैं:
import sys
sys.stdout=None
print=None
हालाँकि, यहां तक कि यह बहुत आसान है:
del print
a,b=int(input()),int(input())
print(a+b)
एक पुलिस वाले के रूप में, आपका लक्ष्य छिपे हुए काम को यथासंभव अस्पष्ट बनाना है, ताकि लुटेरों को खोजने से रोका जा सके।
लुटेरों अपने जवाब में से एक को देखो, और यह दरार करने का प्रयास करेंगे। वे किसी भी वैध स्निपेट को लिखकर उसे क्रैक कर सकते हैं जो स्निपेट 2 के रूप में काम कर सकता है (भाषा के बाद दो संख्याओं को एक साथ जोड़कर ज्यादातर असामान्य बनाया जाता है)। यह करता है नहीं के रूप में आप मूल रूप से करना ही टुकड़ा रहना होगा। यदि कोई डाकू आपके उत्तर को क्रैक करता है, तो वे आपके उत्तर पर एक टिप्पणी छोड़ देंगे, और फिर आपको यह इंगित करने के लिए संपादित करना चाहिए कि यह क्रैक हो गया है। यदि आपकी पोस्ट क्रैक की गई है, तो आपको मूल रूप से इच्छित समाधान (स्निपेट 2) दिखाने के लिए अपने उत्तर को संपादित करना चाहिए। यह एक नियम नहीं है , खेल को मज़ेदार रखने के लिए एक अनुकूल सुझाव है। आपको नहीं करना है।
यदि एक उत्तर पूरे एक सप्ताह तक अनियंत्रित रहता है, तो आप अपने दूसरे स्निपेट में संपादित कर सकते हैं और संकेत कर सकते हैं कि आपका उत्तर अब सुरक्षित है । यदि आप सप्ताह समाप्त होने के बाद इसे संपादित नहीं करते हैं, तो अन्य उपयोगकर्ता तब भी इसे क्रैक कर सकते हैं जब तक आप ऐसा नहीं करते। यदि आप अपना दूसरा स्निपेट प्रकट नहीं करते हैं, तो आप अपने उत्तर के लिए बिंदुओं का दावा नहीं कर सकते, या इसे सुरक्षित नहीं कह सकते।
कॉप्स के धागे का विजेता दोनों स्निपेट्स सहित सबसे छोटा सुरक्षित उत्तर है , जो बाइट्स में गिना जाता है, और पर्याप्त समय बीत जाने के बाद इस जवाब को स्वीकार किया जाएगा । आप करते नहीं अपने बाइट गिनती प्रकट करने के लिए जब तक अपने जवाब, सुरक्षित है के बाद से बाइट गिनती जब तक अपने जवाब के लिए सुरक्षित है आपका स्कोर के लिए अप्रासंगिक है की जरूरत है। इस घटना में कि पर्याप्त समय बीत चुका है और कोई भी उत्तर अनियंत्रित नहीं रहता है, विजेता वह उत्तर होगा जो सबसे लंबे समय तक अनियंत्रित रहा।
मज़े करो!
नियम स्पष्टीकरण
पहला स्निपेट बिना किसी इनपुट के सही ढंग से चलना चाहिए । यह आपको जो भी पसंद हो आउटपुट कर सकता है, और इस आउटपुट को नजरअंदाज कर दिया जाएगा - जब तक कि स्निपेट हो जाने के बाद, दूसरा स्निप सही तरीके से चलता है।
आपके जवाब के मान्य होने के लिए दूसरे स्निपेट को वास्तव में निष्पादित किया जाना चाहिए । इसका मतलब है जैसे उत्तर
import sys sys.exit()
मान्य नहीं है क्योंकि यह भाषा को नहीं तोड़ता है। यह बस बुझती है। इसी तरह, एक अनंत लूप दर्ज करना मान्य नहीं है, क्योंकि दूसरे स्निपेट को कभी भी निष्पादित नहीं किया जाएगा।
सुरक्षित होने के बाद, आपका स्कोर दोनों स्निपेट्स की बाइट गिनती है ।
यह आपके काम के जवाब के लिए आवश्यक किसी भी अजीब धार के मामलों को प्रकट करने के लिए वापस जाता है ... आपके प्रस्तुत करने से पहले प्रकट होने के बाद प्रतिलिपि प्रस्तुत करने योग्य होने के लिए पर्याप्त जानकारी होनी चाहिए । इसका मतलब है कि यदि आपका उत्तर सुरक्षित हो जाता है, और फिर आप इसमें संपादित करते हैं: यहाँ मेरा उत्तर है। ओह हाँ, BTW यह केवल काम करता है यदि आप इसे Solaris पर चलाते हैं, तो आप पर मज़ाक करते हैं! आपका उत्तर अमान्य है और हटा दिया जाएगा और जीतने के योग्य नहीं माना जाएगा।
राशि के आउटपुट के बाद दूसरे स्निपेट को क्रैश करने की अनुमति दी जाती है - जब तक कि आउटपुट अभी भी सही है (उदाहरण के लिए, यदि आप STDERR को आउटपुट चुनते हैं, और फिर आपको क्रैश जानकारी का एक गुच्छा मिलता है, तो यह अमान्य है)।
उत्तर सबमिट करने के बाद आप अपना कोड संपादित नहीं कर सकते।
आप क्रिप्टोग्राफ़िक फ़ंक्शंस जैसे एन्क्रिप्शन, हैश फ़ंक्शंस, CSPRNGs आदि पर निर्भर नहीं हो सकते हैं
int main(){ do_evil_stuff(); }
उपयोगकर्ता कोड कहां जाना चाहिए? एक समारोह में? में सभी बयान के बादmain
?