आप Xeyes को याद कर सकते हैं या नहीं कर सकते हैं, एक डेमो प्रोग्राम जो (और, जहां तक मुझे पता है, अभी भी साथ आता है) एक्स विंडो सिस्टम। इसका उद्देश्य अपने माउस कर्सर के बाद आंखों की एक जोड़ी बनाना था:
आपकी चुनौती ASCII कला के साथ Xeyes को फिर से बनाना है। एक प्रोग्राम या फ़ंक्शन लिखें जो उपयोगकर्ता पर क्लिक करते समय दो ASCII कला आंखें (नीचे निर्दिष्ट) खींचता है और फिर कर्सर की दिशा में इंगित करने के लिए अपने विद्यार्थियों को ले जाता है।
उपरोक्त GIF इस गैर-गोल्फ रूबी कार्यान्वयन की रिकॉर्डिंग है , जिसे रूबी के किसी भी हाल के संस्करण के साथ चलाया जा सकता है। आप इसे Xterm नियंत्रण अनुक्रमों के संदर्भ के रूप में भी उपयोगी पा सकते हैं।
विशेष विवरण
यह कोड-गोल्फ है , इसलिए सबसे कम बाइट जीतता है।
यह एक है ascii अत्याधुनिक तो अपने कार्यक्रम ASCII का उपयोग कर बनानी होगी वर्ण-विशेष रूप से, चुनौती, वर्ण -
, .
, |
, '
, 0
, अंतरिक्ष, और न्यू लाइन। १ २
यह एक इंटरेक्टिव चुनौती है, इसलिए आपके प्रोग्राम को इनपुट को स्वीकार करना चाहिए और रियलटाइम में इसका आउटपुट आकर्षित करना चाहिए। 3
इससे पहले कि आपका कार्यक्रम इनपुट स्वीकार करना शुरू करे, उसे कम से कम 20 पंक्तियों और 20 स्तंभों के रिक्त कैनवास को इनिशियलाइज़ करना चाहिए। जब तक उपयोगकर्ता कैनवास पर क्लिक नहीं करता तब तक उसे कुछ भी आकर्षित नहीं करना चाहिए।
जब भी उपयोगकर्ता कैनवास पर 4 क्लिक करता है , तो प्रोग्राम को किसी भी पिछले आउटपुट को साफ करना चाहिए और फिर इन एएससीआईआई को कैनवास पर आकर्षित करना चाहिए, जो माउस कर्सर के स्थान के निकटतम चरित्र पर केंद्रित है। 5 6 (नीचे, ✧
माउस कर्सर का प्रतिनिधित्व करता है और इसे खींचा नहीं जाना चाहिए।)
.---. .---.
| | | |
| 0|✧|0 |
| | | |
'---' '---'
ध्यान दें कि कैसे कर्सर "बिंदु" कर्सर की ओर।
किसी भी समय माउस कर्सर कैनवास पर चला जाता है, कार्यक्रम को विद्यार्थियों को फिर से खींचना चाहिए ताकि वे कर्सर की ओर इशारा करते रहें, 7 :
✧
.---. .---.
| 0| | 0|
| | | |
| | | |
'---' '---'
पुपिल इशारा करते हुए
मान लीजिए कि हमने प्रत्येक आंख के आंतरिक नौ पात्रों की स्थितियों को इस तरह दोहराया है:
.---.
|678|
|591|
|432|
'---'
पुतली को एक स्थान पर खींचा जाएगा 1
- 9
। यह तय करने के लिए कि कौन सा वर्ण है, वर्ण वर्गाकार हैं और कैनवास एक कार्टेशियन ग्रिड है, जिसमें 9
(0, 0) के केंद्र में 1
, (1, 0) का केंद्र, और इसी तरह का चरित्र है । जब प्रोग्राम को इनपुट प्राप्त होता है - क्लिक या मूवमेंट - यह इनपुट लोकेशन को निकटतम ग्रिड कोऑर्डिनेट पर मैप करना चाहिए —। यदि il है (0, 0), तो पुतली को (0, 0), यानी 9
ऊपर के स्थान पर खींचा जाना चाहिए । अन्यथा, इसे नीचे वर्णित अनुसार खींचा जाना चाहिए।
कल्पना कीजिए कि एक कार्तीय तल ग्रिड पर आरोपित और octants में विभाजित गिने 1 - 8 :
यदि 𝑀 अष्टक 1 के भीतर है , तो पुतली को 1
उपरोक्त स्थान पर (1, 0) पर खींचा जाना चाहिए । यदि 𝑀 अष्टक 2 में है, तो इसे 2
इसी तरह खींचा जाना चाहिए । वर्णन करने के लिए, नीचे की छवि ग्रिड रंग-कोडित के उस हिस्से को दिखाती है, जहां माउस कर्सर किसी विशेष स्थान पर होने पर पुतली को खींचा जाना चाहिए। जब, उदाहरण के लिए, कर्सर किसी भी हरे निर्देशांक पर होता है (ध्यान में रखते हुए कि ग्रिड निर्देशांक वर्गों के केंद्रों पर स्थित होते हैं, न कि उनके कोने), शिष्य को खींचा जाना चाहिए 4
।
दो आंखों की पुतलियां स्वतंत्र रूप से चलती हैं, इसलिए प्रत्येक आंख के लिए उस आंख के केंद्र के सापेक्ष प्रक्रिया को दोहराते हैं।
टिप्पणियाँ
यह ग्राफ़िकल-आउटपुट चुनौती नहीं है। आउटपुट वर्णों का ग्रिड होना चाहिए। आप निश्चित रूप से, पात्रों की एक ग्रिड बनाने के लिए ग्राफिक्स रूटीन का उपयोग कर सकते हैं।
व्हाट्सएप खींचा जा सकता है (या, बल्कि, खींचा नहीं गया) हालांकि सुविधाजनक है। ग्रिड में एक खाली स्थान एक अंतरिक्ष वर्ण के समान दिखता है और इसे समकक्ष माना जाएगा।
"रीयल-टाइम" को इनपुट और संगत आउटपुट के बीच 200ms से कम के रूप में परिभाषित किया गया है।
यह आपके विवेक पर है कि कौन सा माउस बटन इनपुट के लिए मनाया जाता है, और क्या एक प्रेस या रिलीज एक "क्लिक" का गठन करता है।
कैनवास को साफ किया जाना चाहिए, या दृश्य समकक्ष प्राप्त किया जाना चाहिए। एक टर्मिनल-आधारित समाधान के साथ, उदाहरण के लिए, पिछले कैनवास के नीचे एक नया कैनवास प्रिंट करना समकक्ष नहीं माना जाता है।
जब उपयोगकर्ता कैनवास के किनारे के पास क्लिक करता है जैसे कि आंख के कुछ अक्षर इसके किनारे से परे खींचे जाएंगे, तो व्यवहार अपरिभाषित है। हालाँकि, प्रोग्राम को बाद के क्लिक पर सामान्य रूप से चलते रहना चाहिए।
जब माउस कर्सर "कैनवास" को छोड़ देता है, तो व्यवहार अपरिभाषित होता है, लेकिन जब कर्सर फिर से कैनवास में प्रवेश करता है, तो प्रोग्राम को सामान्य रूप से चलता रहना चाहिए।
कैनवास पर एक टेक्स्ट कर्सर दिखाई दे सकता है, जब तक कि यह आउटपुट को अस्पष्ट नहीं करता है।
मानक खामियों को मना किया जाता है।
<pre>
या font-family:monospace
) का हिस्सा होना चाहिए ।