यह एक कोड-गोल्फ चुनौती है, जिसके तहत आपको एक ऐसे कार्यक्रम को तैयार करने की आवश्यकता होती है जो एक क्वीन या एक क्वीन की तरह काम करता है जो मशीन सीखने को समझने के लिए खुद को संशोधित करता है।
पृष्ठभूमि
एक मूल कृत्रिम बुद्धिमत्ता कार्यक्रम है जिसे 'पैंगोलिन गेम' कहा जाता है जो यहाँ वर्णित है । मूल विचार यह है कि कार्यक्रम जब पहली बार चलता है तो पूछता है:
ठीक है, कृपया कुछ सोचें
क्या यह पैंगोलिन है?
आप तब या तो जवाब दे सकते हैं:
हाँ
किस मामले में यह कहता है:
अच्छा। यह soooo आसान था।
या नहीं तो यह कहते हैं:
ओह। खैर आप तब जीतते हैं - आप क्या सोच रहे थे?
जिस पर आप कह सकते हैं:
एक कुत्ता
जिसको यह कहेंगे
कृपया मुझे एक कुत्ते के बारे में एक प्रश्न दें, इसलिए मैं एक कुत्ते और एक पैंगोलिन के बीच का अंतर बता सकता हूं
आप जवाब दे सकते हैं
क्या यह चींटियों को खाता है?
यह तो पूछना होगा:
कुत्ते के लिए क्या जवाब है?
जिस पर आप कहेंगे
नहीं
और यह कहेगा
धन्यवाद
अगली बार जब यह चलता है, तो यह ऊपर दिए गए सवाल पूछेगा, और इस तरह के सवालों के एक द्विआधारी पेड़ का निर्माण करेगा।
चुनौती
पर्याप्त पृष्ठभूमि। यह चुनौती एक स्व-संशोधित पैंगोलिन कार्यक्रम लिखना है। नियम इस प्रकार हैं:
कार्यक्रम आउटपुट (जैसा ऊपर वर्णित है) होना चाहिए
STDERR
। अंतिम प्रतिक्रिया हमेशा "अच्छी होगी। यह बहुत आसान था।" या "धन्यवाद"। इसके बाद, इसे प्रोग्राम के वर्तमान संस्करण या तो प्रोग्राम का एक नया संस्करण आउटपुट करना चाहिए, जिसमें प्रश्न शामिल होता हैSTDOUT
। ऐसी भाषा में लिखा गया कोई उत्तर, जो लिखनेSTDOUT
औरSTDERR
या पढ़ने का समर्थन नहीं करताSTDIN
है, मान्य होगा।UNIX के तहत दूसरे शब्दों में आप इस तरह से कार्यक्रम को लागू कर सकते हैं:
उदाहरण:
$ mylanguage myprogram > myprogram.1
[dialog goes here]
$ mylanguage myprogram1 > myprogram.2
[dialog goes here]
- कार्यक्रम को बिल्कुल निर्दिष्ट संकेतों का उपयोग करना है (क्योंकि संकेतों को छोटा करने से कोई कौशल नहीं दिखता है)। संकेत इस प्रकार हैं (उद्धरण के बिना, और जहाँ% s प्रतिस्थापित है) निम्नानुसार हैं:
सूची:
"OK, please think of something"
"Is it %s?"
"Good. That was soooo easy."
"Oh. Well you win then -- What were you thinking of?"
"Please give me a question about %s, so I can tell the difference between %s and %s"
"What is the answer for %s?"
"Thanks"
जब हाँ / नहीं जवाब की उम्मीद कर, अपने कार्यक्रम को स्वीकार करना चाहिए
y
याyes
'हाँ' के लिए किसी भी मामले में, औरn
याno
के लिए 'नहीं' किसी भी मामले में। आप गैर-अनुरूपता वाले इनपुट के साथ क्या करते हैं, यह आपके ऊपर है। उदाहरण के लिए, आप ऐसा कोई भी उत्तर लेने का निर्णय ले सकते हैं, जो 'हां' के साथy
याY
किसी और के रूप में शुरू होता है ।आप मान सकते हैं कि आपूर्ति की गई चीजों के नाम और प्रश्न में केवल ASCII अक्षर, संख्याएं, रिक्त स्थान, हाइफ़न, प्रश्न चिह्न, अल्पविराम, पूर्ण विराम, कॉलोन और अर्धविराम शामिल हैं, अर्थात वे regex के बाद मेल खाते हैं
^[-?,.;: a-zA-Z]+$
। यदि आप इससे अधिक का सामना कर सकते हैं (विशेष रूप से आपकी चुनी हुई भाषा में पात्रों को उद्धृत करते हुए) तो आपको स्मॉग का शिकार होना पड़ेगा, लेकिन किसी भी अतिरिक्त बिंदु को हासिल न करें।आपका कार्यक्रम पढ़ने या लिखने नहीं हो सकता है किसी भी फ़ाइल (छोड़कर
STDIN
,STDOUT
औरSTDERR
), या नेटवर्क से; विशेष रूप से यह न तो डिस्क से अपना कोड पढ़ सकता है और न ही लिख सकता है। इसका राज्य प्रोग्राम कोड में ही सहेजा जाना चाहिए।जब प्रोग्राम चलाया जाता है और सही ढंग से उत्तर का अनुमान लगाता है, तो उसे बिल्कुल एक क्वीन के रूप में प्रदर्शन करना चाहिए , अर्थात उसे
STDOUT
अपने कोड को बिल्कुल अपरिवर्तित लिखना होगा ।जब प्रोग्राम चलाया जाता है और गलत तरीके से उत्तर का अनुमान लगाता है, तो उसे प्रदान किए गए नए प्रश्न और उत्तर को अपने कोड में एनकोड करना होगा और उसे अपने कोड में लिखना होगा
STDOUT
, इसलिए यह अपने मूल अनुमान और प्रदान की गई नई वस्तु के बीच अंतर करने में सक्षम है, पहले दी गई सभी वस्तुओं के बीच अंतर करने के अलावा।आपको सॉफ़्टवेयर के कई अनुक्रमिक रन का सामना करने में सक्षम होना चाहिए ताकि यह कई वस्तुओं के बारे में सीख सके। कई रन के उदाहरण के लिए यहां देखें ।
परीक्षण रन सिर में लिंक पर दिए गए हैं (जाहिर है कि केवल
STDIN
औरSTDERR
संवाद को कवर करते हुए )।मानक खामियों को बाहर रखा गया है।