गोल्फस्क्रिप्ट विकर्ण ऐरे


11

क्या एक व्यूह के सभी विकर्णों को एकल सरणी में लाने के लिए गोल्फस्क्रिप्ट में एक तरीका है?

उदाहरण के लिए, सरणी के लिए

[[1 2 3][4 5 6][7 8 9]]

वापसी

[[7][4 8][1 5 9][2 6][3]]

(जरूरी नहीं कि उस क्रम में) और के लिए

["ABCD""EFGH""IJKL"]

वापसी

["I""EJ""AFK""BGL""CH""D"]

(उस ऑर्डर में जरूरी नहीं है)। मान लें कि सरणियों की लंबाई समान है।

मैं इसे समझ रहा हूं। मैं के साथ कुछ करने की कोशिश की और तार =के (length+1)वें चरित्र के माध्यम से पुनरावृत्ति , लेकिन वह काम नहीं किया। क्या कोई मेरी मदत कर सकता है?

यदि संभव हो तो मैं ऐसा करने का सबसे छोटा तरीका चाहूंगा।


यह आपकी नियमित क्यू एंड ए साइट नहीं है; आप एक जीत मानदंड की जरूरत है। मैं शुरुआत के लिए एक लोकप्रियता सामग्री का सुझाव देता हूं।
टाइमटेक

@ टिमटेक मैं समझता हूं। मैं नियमित स्टेक्सचेंज की कोशिश करूँगा।
जोसिया विंस्लो

7
भाषा-विशिष्ट गोल्फ सलाह प्रश्न आधिकारिक तौर पर विषय पर हैं: meta.codegolf.stackexchange.com/a/1725/20260
xnor

5
@xnor आप वहाँ गलत उत्तर से जुड़े। यह उन सुझावों की सूची के बारे में है जो हमारे पास हैं। लेकिन विशिष्ट सलाह मांगना भी विषय पर है, इसलिए अच्छा होगा यदि लोग इसे बंद कर सकते हैं और इसे बंद कर सकते हैं।
मार्टिन एंडर

7
@steveverrill मैं सहमत नहीं हूं कि इन्हें CW बनाया जाना चाहिए। यह केवल सूची प्रश्नों पर लागू होता है (वास्तव में, मैं इस बात से भी सहमत नहीं हूं कि वे सीडब्ल्यू होना चाहिए), लेकिन सीडब्ल्यू होने के लिए विशिष्ट सलाह सवाल का कोई कारण नहीं है - वे मूल रूप से माइक्रो-ऑप्टिमाइज़ेशन गोल्फ प्रतियोगिता हैं, और जवाब देने वाले लोग वे इसके लिए प्रतिनिधि के लायक हैं (जैसा कि प्रश्नकर्ता, यदि प्रश्न दिलचस्प है)।
मार्टिन एंडर

जवाबों:


8

विचार करें

[
    "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

सभी विकर्णों को प्राप्त करने के लिए, कुछ अनावश्यक लाइनफीड वर्ण।

मैंने इस उत्तर में प्रक्रिया को विस्तार से बताया है ।

इसे ऑनलाइन आज़माएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.