CJam, 32 30 29 28 बाइट्स
ri_"/\ /"2/f*)@,\f>+_z..e>N*
इसका परीक्षण यहां करें।
मैं रेटो गोल्फ को अपने सीजेएम जवाब में मदद करने की कोशिश कर रहा था, लेकिन एक ऐसे समाधान के साथ समाप्त हुआ जिसका उसके साथ कोई लेना-देना नहीं था, इसलिए मुझे लगा कि मैं खुद भी इसे पोस्ट कर सकता हूं।
व्याख्या
यह आउटपुट की समरूपता का उपयोग करता है। विशेष रूप से, तथ्य यह है कि आउटपुट इसके ट्रांसपोज़ के समान है।
सबसे पहले, हम पहली N+1
पंक्तियों को उत्पन्न करते हैं, लेकिन बाएं किनारे के बिना:
ri e# Read input and convert to integer N.
_ e# Duplicate.
"/\ /"2/ e# Push an array with two strings: ["/\" " /"]
f* e# Repeat each of the two strings N times. That gives the first two rows.
) e# Detach the second row.
@, e# Pull up the other copy of N and turn into range [0 1 ... N-1].
\f> e# For each element i in that range, discard the first i characters of
e# the second row.
+ e# Add all those lines back to the first row.
अब हमें निम्नलिखित ग्रिड का प्रतिनिधित्व करने वाले तार की एक सरणी मिली है:
/\/\/\/\
/ / / /
/ / / /
/ / /
/ / /
इस तरह का परिवर्तन इस तरह दिखता है:
/ / /
\/ /
/ / /
\/ /
/ / /
\/ /
/ /
\/
साथ में, ये सभी गैर-अंतरिक्ष वर्ण हैं जिनकी हमें आवश्यकता है। अब हम वर्णों की प्रत्येक संगत जोड़ी का अधिकतम लाभ उठाते हुए, दो ASCII ग्रिडों को एक में मिलाने के लिए डेनिस के रेड टिप का उपयोग कर सकते हैं । सभी स्थितियों में जहां दोनों ग्रिड अलग-अलग होते हैं, एक में एक स्थान होगा (या कुछ भी नहीं) और दूसरे में वह चरित्र होगा जिसकी हम तलाश कर रहे हैं। जब एक सदिश ऑपरेशन में एक सूची दूसरे की तुलना में लंबी होती है, तो लंबी सूची के अतिरिक्त तत्वों को बस रखा जाएगा, जो कि सिर्फ वही है जो आपको दिखता है। अन्य मामलों में, गैर-स्थान वर्ण हमेशा दो वर्णों का अधिकतम होगा:
_z e# Duplicate the grid and transpose it.
..e> e# For each pair of characters in corresponding positions, pick the maximum.
N* e# Join the lines by linefeed characters.
;
s को हटा सकते हैं ।