विचार करें
[
"ABCD"
"EFGH"
"IJKL"
]
मुख्य विकर्ण और इसके ऊपर के विकर्णों को प्राप्त करने के लिए, हम दूसरी पंक्ति के पहले चार और तीसरे के पहले दो को बाहर निकाल सकते हैं:
[
"ABCD"
"FGH"
"KL"
]
ध्यान दें कि सभी कॉलम एक विकर्ण से मेल खाते हैं, इसलिए सरणी को "ज़िप करना" (अर्थात, पंक्तियों और स्तंभों को स्थानांतरित करना) एक सरणी को उपर्युक्त चार विकर्णों से युक्त करेगा:
[
"AFK"
"BGL"
"CH"
"D"
]
हम अभी भी मुख्य विकर्ण के नीचे के विकर्णों को याद कर रहे हैं।
यदि हम खुद को ज़िप करते हैं और उपरोक्त प्रक्रिया को दोहराते हैं, तो हम एक सरणी प्राप्त करेंगे जिसमें मुख्य विकर्ण और उसके नीचे सभी विकर्ण हैं । यह सब छोड़ दिया है दोनों सरणियों के सेट संघ की गणना करने के लिए।
यह सब एक साथ डालें:
[.zip]{:A,,{.A=>}%zip}/|
[.zip]{ }/ # For the original array and it's transpose, do the following:
:A # Store the array in A.
,,{ }% # For each I in [ 0 1 ... len(A) ], do the following:
.A=> # Push A[I] and shift out its first I characters.
zip # Transpose the resulting array.
| # Perform set union.
इसे ऑनलाइन आज़माएं।
अंत में, अगर हमें केवल विकर्णों की आवश्यकता है क्योंकि हम उनके अंदर एक स्ट्रिंग खोज रहे हैं (जैसे शब्द खोज पहेली , जिसे मैं इस प्रश्न से प्रेरित मानता हूं), एक "कम साफ" दृष्टिकोण भी उपयुक्त हो सकता है।
आप उपयोग कर सकते हैं
..,n**\.0=,\,+)/zip
सभी विकर्णों को प्राप्त करने के लिए, कुछ अनावश्यक लाइनफीड वर्ण।
मैंने इस उत्तर में प्रक्रिया को विस्तार से बताया है ।
इसे ऑनलाइन आज़माएं।