कार्य
एक साधारण आईआरसी बॉट बनाएं जो ग्रीटिंग उपयोगकर्ता की तरह सरल कार्य करता है।
विस्तार
(आप इस RFC दस्तावेज़ को देख सकते हैं ।)
एक पूरा कार्यक्रम लिखें जो इनका प्रदर्शन करें:
कार्यक्रम इनपुट
nicknameऔरrealnameउपयोगकर्ता से।- सभी
nicknameऔरrealnameकौन से फॉर्म की[A-Za-z0-9]+अनुमति दी जानी चाहिए, लेकिन यह महत्वपूर्ण नहीं है कि अन्य फॉर्म की अनुमति है या नहीं। उदाहरण के लिए, यदि उपयोगकर्ता चाहता1234qwertyहैnicknameऔर5319009जैसे हीrealname, प्रोग्राम को उन नामों का उपयोग करना चाहिए, लेकिन यह महत्वपूर्ण नहीं है कि प्रोग्राम^^☆Rick Astley☆^^(nicknameया गैर-वर्णमाला और दशमलव सहित) का उपयोग कर सकता है ( याrealname) या नहीं, यहां तक कि सोचा कि यह नाम अस्वीकार हो सकता है। सर्वर द्वारा।
- सभी
प्रोग्राम
serverAddressउपयोगकर्ता से इनपुट करता है।- का रूप
serverAddressहैserverIP:serverPort, जहांserverIPसर्वर का आईपी पता है और सर्वरserverPortका पोर्ट संख्या है।
- का रूप
कार्यक्रम
serverPortआईआरसी सर्वर पर पोर्ट से कनेक्ट होता हैserverIP, और इसे भेजने केnicknameरूप में और वास्तविक नाम के रूप में उपनाम सेट करना चाहिए और ।realnameUSER realname 0 * :realnameNICK nicknameकार्यक्रम एक इनपुट है
channelNameजिसमें शामिल नहीं है#, और चैनल में शामिल हो#channelName।इस तरह चैनल
Hello, world!को एक निजी संदेश भेजें#channelName:PRIVMSG #channelName :Hello, world!फिर, प्रोग्राम ये करता है:
A. यदि कोई इसमें शामिल होता है, तो उसे यह कहकर अभिवादन
Hello, @!करना चाहिए#channelName, जहां @ उसका / उसका उपनाम है।B. यदि प्रोग्राम को किक किया जाता है, तो पुन: जुड़ने का प्रयास करें।
C. यदि किसी व्यक्ति को मार दिया जाता है या प्रतिबंधित किया जाता है, तो कहें
POW HAHA।D. यदि कोई व्यक्ति छोड़ता है (
PARTयाQUITकहता है)Goodbye, @!, जहाँ @ उसका / उसका उपनाम है।ई। यदि कोई पाठ सहित
Turing testयाturing testकहता है, तोI'm a human!।F. यदि कोई पाठ सहित कुछ पाठ कहता है
6*9,QUIT :42तो सर्वर पर भेजकर छोड़ दें ।जी। अगर कोई कुछ कहता है
all your base are belong to us(केस-इनसेंसिटिव),QUIT :What you say!तो सर्वर पर भेजकर छोड़ दें ।एच। यदि कोई कहता है कि किसी पाठ में स्थान और उपरोक्त कृत्यों से पहले पाठ नहीं किया गया है, तो पाठ के सभी (पहले स्थान को छोड़कर) वर्णों का योग कहें।
यदि कोई त्रुटि हुई है
यदि कोई त्रुटि (जैसे कनेक्शन त्रुटि या अमान्य nickname) हुई है, तो आप वह कर सकते हैं जो आप करना चाहते हैं। उदाहरण के लिए, यदि nicknameपहले से उपयोग में है, तो प्रोग्राम बंद हो सकता है, nicknameउपयोगकर्ता से एक नया मिलता है , या स्वचालित रूप से बदल सकता है nicknameऔर पुन: प्रयास कर सकता है।
बंधन
कार्यक्रम
- किसी भी आंतरिक कार्यों या पुस्तकालयों का उपयोग नहीं करना चाहिए जो आईआरसी क्लाइंट / बॉट मेकिंग के लिए है। यानी आईआरसी क्लाइंट लाइब्रेरी जैसी कोई चीज
- इनपुट करने से पहले उसे क्या करना चाहिए , इसका संकेत देना चाहिए । उदाहरण के लिए, आदानों से पहले
serverAddress, यह संकेत चाहिएWrite the address of server:,serverIP:serverPort >,serverAddress >, या कुछ पाठ उपयोगकर्ता को पहचान सकते हैं कि। - UTF-8 का उपयोग करके कई IRC सर्वरों पर काम करना चाहिए। (यानी सिंगल सर्वर के लिए नहीं)
- सर्वर को भेजे जाने वाले संदेश नहीं होने चाहिए
NOTICE। (RFC 2812, 3.3.2 नोटिस: एक संदेश के जवाब में स्वचालित उत्तर अवश्य भेजा जाना चाहिएNOTICEऔर इसके बीच अंतर है ।)PRIVMSGNOTICE - एक संदेश भेजना चाहिए जहां अनुरोध (
#channelNameयाnickname) से आया है । - चाहिए
PONGजबPINGनिश्चित रूप से एड।
पुनश्च
खैर, मैंने इसे सिर्फ इसलिए बनाया, क्योंकि आईआरसी बॉट के बारे में कोई पहेली नहीं थी।
संपादित करें
@ Dmckee की टिप्पणी पढ़ने के बाद, मैंने विजेता चुनने के नियम को बदल दिया।
डिफ़ॉल्ट
bonus= +0अगर किसी तरह कार्यक्रम एक चैनल से जुड़ सकता है (भले ही यह नहीं है
#channelName),bonus= 1यदि प्रोग्राम चरण 1 ~ 5,
bonus* = 2 कर सकता है।यदि चरण लागू होता है, तो प्रत्येक कार्य के लिए चरण 6 में ए ~ एच,
bonus* =1.2।प्रत्येक छह प्रतिबंधों के लिए, यदि प्रोग्राम इस प्रकार है,
bonus* =1.05।
और score = int(codelength/bonus)।
न्यूनतम स्कोर वाला कार्यक्रम विजेता है। यदि दो उत्तरों में समान स्कोर है, तो उच्चतम वोटों के साथ उत्तर जीतता है।
संपादित करें संपादित करें: मुझे लगता है कि 1.2और 1.05कदम 4 और 5 में से थोड़ा बड़ा समायोजित किया जाना चाहिए .. आप इस बारे में क्या सोचते हैं?
विजेता का फैसला किया जाता है, हालांकि, मुझे लगता है कि बहुत कम प्रविष्टियां थीं।
कोई भी अभी भी कोड जमा कर सकता है ..: पी