pb , 83 बाइट्स
^<b[1]>>>w[B!0]{<w[B!0]{t[B]<b[T]>>}<b[0]<b[0]<[X]>>}w[B=0]{<}t[B]<[X]t[B+T]vb[T/2]
जबकि इनपुट स्ट्रिंग में कम से कम 3 अक्षर हैं, पहले और आखिरी को हटा दिया जाता है। यह या तो 1 वर्ण को छोड़ देता है (अनमॉडिफाइड मुद्रित होना चाहिए) या 2 (औसत और मुद्रित होना चाहिए)। इसे संभालने के लिए, स्ट्रिंग के पहले और अंतिम पात्रों को एक साथ जोड़ा जाता है और दो से विभाजित किया जाता है। अगर वहाँ केवल एक चरित्र था (a+a)/2==a
। अगर दो था, (a+b)/2
तो वह चरित्र है जिसे मुद्रित करने की आवश्यकता है। pb "उधार" पायथन के अभिव्यक्ति मूल्यांकन ( def expression(e): return eval(e, globals())
) इसलिए यह स्वचालित रूप से फ़्लॉयर किया जाता है।
खाली इनपुट को संभालने में मेरी लागत 5 बाइट होती है। विशेष रूप से,<b[1]>
पहली पंक्ति पर। इससे पहले, जब मैंने "स्ट्रिंग" कहा, तो यह कुल झूठ था। पंजाब में तार नहीं हैं, इसमें ऐसे अक्षर हैं जो एक दूसरे के करीब होते हैं। "एक स्ट्रिंग के अंतिम चरित्र" की तलाश में बस ब्रश को बाईं ओर ले जाने का मतलब है जब तक कि यह एक चरित्र को हिट नहीं करता है। जब कोई इनपुट प्रदान नहीं किया जाता है, तो "जबकि कम से कम 3 वर्ण हैं" लूप पूरी तरह से छोड़ दिया जाता है और यह अंतिम चरित्र की तलाश शुरू करता है। इसके बिना <b[1]>
, यह हमेशा के लिए देखती रहेगी। यह कोड विशेष रूप से इनपुट खाली होने पर 1 के मान से एक वर्ण (-1, -1) रखता है। स्ट्रिंग के "अंतिम वर्ण" को खोजने के बाद ब्रश मान लेता है कि पहला (0, -1) है और सीधे वहां जाता है, 0. (1+0)/2
का मान ज्ञात करते हुए pb में 0 है,
लेकिन मोनोरेल, यह अभी भी छपाई है! चुनौती विनिर्देश कहता है(empty input) => (empty output)
! क्या एक अशक्त चरित्र को धोखा देना नहीं है? इसके अलावा, यह असंबंधित है, लेकिन आप स्मार्ट और सुंदर हैं।
धन्यवाद, काल्पनिक प्रश्न पूछने वाला इससे पहले, जब मैंने "प्रिंट" कहा, तो यह कुल झूठ था। Pb में, आप वास्तव में मान नहीं छापते हैं, आप बस उन्हें कैनवास पर रखते हैं। "आउटपुट के लिए एक रास्ता" के बजाय, कैनवास को असीम रूप से बड़े 2 डी सरणी के रूप में कल्पना करना अधिक सटीक है। यह किसी भी आयाम में नकारात्मक सूचकांकों की अनुमति देता है, और pb में बहुत सारी प्रोग्रामिंग वास्तव में यह सुनिश्चित करने के बारे में है कि ब्रश कैनवास पर उस स्थान पर पहुंच जाता है जिसे आप चाहते हैं। जब प्रोग्राम निष्पादित करना समाप्त करता है, तो गैर-नकारात्मक एक्स और वाई निर्देशांक के साथ कैनवास पर कुछ भी कंसोल पर उपयुक्त स्थान पर मुद्रित होता है। जब प्रोग्राम शुरू होता है, तो पूरा कैनवास 0. के मानों से भरा होता है, जिसमें अनंत पंक्तियों को प्रिंट नहीं करना पड़ता है, प्रत्येक में अनंत संख्या में नल बाइट्स होते हैं, आउटपुट की प्रत्येक पंक्ति केवल पिछले नॉनज़ेरो कैरेक्टर तक ही प्रिंट की जाती है, और इसमें केवल नॉनज़ेरो कैरेक्टर वाली लाइनें ही आखिरी तक प्रिंट की जाती हैं। इसलिए ए डाल रहा है0
पर (0, 0) अभी भी एक खाली आउटपुट है।
Ungolfed:
^<b[1]> # Prevent an infinite loop on empty input
>>w[B!0]{ # While there are at least 3 chars of input:
<w[B!0]{ # Starting at the second character:
t[B]<b[T]>> # Copy all characters one position to the left
# (Effectively erasing the first character)
}
<b[0]<b[0] # Delete both copies of the last character
<[X]>> # Get in place to restart loop
}
w[B=0]{<} # Go to last character of remaining string
t[B]<[X]t[B+T] # Find it plus the first character
vb[T/2] # Divide by 2 and print