पृष्ठभूमि
दो लोग हैं, बिल और जॉन। उनमें से एक शूरवीर है, जो हमेशा सच कहता है, और दूसरा एक शूरवीर है, जो हमेशा झूठ कहता है। आप नहीं जानते कि कौन शूरवीर है और कौन शूरवीर है। प्रत्येक व्यक्ति तब कई कथन कहता है कि कौन शूरवीर है और कौन शूरवीर है। इस जानकारी का उपयोग करते हुए, आपको एक निष्कर्ष पर आना चाहिए कि कौन शूरवीर है और कौन शूरवीर है।
शूरवीरों और knaves तर्क समस्या Booleen बीजगणित पर आधारित है। एक व्यक्ति जो शब्द कहता है, वह बोलेन संतोषजनक संतुष्टि समस्या का कारण बनता है। घुटने के बयान हमेशा झूठे होने चाहिए और दूसरे के बयान हमेशा सही होने चाहिए।
जॉन कहते हैं "दोनों मैं एक गुलाम हूँ और बिल एक दास है"। यदि जॉन शूरवीर थे, तो यह कथन गलत होगा, इसलिए वह शूरवीर नहीं हो सकते। यदि वह शूरवीर थे और विधेयक शूरवीर थे, तब भी यह कथन असत्य होगा, यहां तक कि यह भी कि पहला भाग सत्य है। तो, जॉन गुलाम है।
चुनौती
आपकी चुनौती संभव है कि सबसे छोटा कार्यक्रम लिखा जाए जो प्रत्येक व्यक्ति द्वारा दिए गए कथनों की एक सूची लेगा और यह पता लगाएगा कि कौन शूरवीर है और कौन शूरवीर है। कवर करने के लिए बहुत सारे विवरण हैं, इसलिए यह समस्या तीन खंडों में वर्णित है।
इनपुट
इनपुट एक नई पंक्ति के बाद दो लाइनें होगी। प्रत्येक पंक्ति एक वर्ण का नाम देगी, उसके बाद एक बृहदान्त्र, उसके बाद उस व्यक्ति द्वारा कहे गए कई वाक्य होंगे। यदि एक व्यक्ति शूरवीर है, तो उसके सभी वाक्य सत्य होंगे, और सभी शूरवीरों के वाक्य झूठे होंगे। एक वाक्य के पहले अक्षर को हमेशा कैपिटल किया जाएगा, और हर वाक्य एक अवधि के साथ समाप्त होगा। यहाँ एक उदाहरण है:
Joe: Both I am a knight and neither Steve is a knave nor I am a knave.
Steve: Joe is a knave. Either Joe is a knight or I am a knight.
पदच्छेद
प्रत्येक वाक्य में कम से कम एक खंड होता है। प्रत्येक खंड में कई चीजें शामिल हैं (उम्मीद है कि आप मेरे संकेतन को समझ सकते हैं):
both [clause] and [clause]
either [clause] or [clause]
neither [clause] nor [clause]
[I am | (other person's name) is] a [knight | knave]
यह असंदिग्ध है क्योंकि यह पोलिश संकेतन के समान समझा जा सकता है। यहाँ एक वाक्य का उदाहरण दिया गया है:
Both I am a knight and neither Steve is a knave nor I am a knave.
Booleen बीजगणित में अनुवाद सीधा है। "दोनों" कथन ANDs हैं, "या तो" कथन XORs हैं, और "न तो" कथन NOR हैं।
(I am a knight) AND ((Steve is a knave) NOR (I am a knave))
उत्पादन
आउटपुट में दो लाइनें होंगी। प्रत्येक पंक्ति में एक व्यक्ति का नाम (क्रम में) होता है और फिर कहता है कि वह शूरवीर है या गुलाम। हमेशा एक शूरवीर और एक शूरवीर होगा। यहाँ उपरोक्त उदाहरण के लिए आउटपुट है:
Joe is the knave.
Steve is the knight.
यदि समस्या असाध्य है (या तो आप यह नहीं बता सकते कि कौन क्या है, या कोई समाधान नहीं है), तो आपका कार्यक्रम कुछ भी कर सकता है EXCEPT एक वैध आउटपुट का उत्पादन करता है।
और ज्यादा उदाहरण
इनपुट
Sir Lancelot: Either both I am a knight and Merlin is a knave or both I am a knave and Merlin is a knight.
Merlin: Either both I am a knight and Sir Lancelot is a knight or both I am a knave and Sir Lancelot is a knave.
उत्पादन
Sir Lancelot is the knight.
Merlin is the knave.
इनपुट
David: Neither I am a knave nor Patrick is a knight. Either I am a knight or Patrick is a knave.
Patrick: Either I am a knight or both I am a knight and David is a knight.
उत्पादन
David is the knave.
Patrick is the knight.
इनपुट
Lizard: I am a knight.
Spock: I am a knave.
एक संभव उत्पादन
Rock Paper Scissors
नियम, विनियम और नोट्स
- मानक कोड गोल्फ नियम लागू होते हैं
- आपका कार्यक्रम केवल मुद्रण योग्य ASCII से बना होना चाहिए
- सभी इनपुट और आउटपुट STDIN और STDOUT से होंगे