MATL , 59 54 52 बाइट्स
4t:g2I5vXdK8(3K23h32h(H14(t!XR+8: 7:Pht3$)'DtdTX.'w)
इसे ऑनलाइन आज़माएं!
व्याख्या
कोड तीन मुख्य चरणों का पालन करता है:
8x8 मैट्रिक्स उत्पन्न करें
4 0 0 3 0 0 0 4
0 1 0 0 0 2 0 0
0 0 1 0 0 0 3 0
3 0 0 1 0 0 0 3
0 0 0 0 1 0 0 0
0 2 0 0 0 2 0 0
0 0 3 0 0 0 3 0
4 0 0 3 0 0 0 5
इसे 15x15 मैट्रिक्स तक बढ़ाएं
4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
4 0 0 3 0 0 0 5 0 0 0 3 0 0 4
0 0 3 0 0 0 3 0 3 0 0 0 3 0 0
0 2 0 0 0 2 0 0 0 2 0 0 0 2 0
0 0 0 0 1 0 0 0 0 0 1 0 0 0 0
3 0 0 1 0 0 0 3 0 0 0 1 0 0 3
0 0 1 0 0 0 3 0 3 0 0 0 1 0 0
0 1 0 0 0 2 0 0 0 2 0 0 0 1 0
4 0 0 3 0 0 0 4 0 0 0 3 0 0 4
'DtdTX.'
वांछित परिणाम उत्पन्न करने के लिए उस मैट्रिक्स के साथ स्ट्रिंग को अनुक्रमित करें ।
चरण 1
4 % Push 4
t: % Duplicate, range: pushes [1 2 3 4]
g % Logical: convert to [1 1 1 1]
2I5 % Push 2, then 3, then 5
v % Concatenate all stack vertically into vector [4 1 1 1 1 2 3 5]
Xd % Generate diagonal matrix from that vector
अब हमें नॉनज़रो ऑफ-विकर्ण प्रविष्टियों को भरने की आवश्यकता है। हम केवल उन विकर्णों को भरेंगे, और फिर दूसरों को भरने के लिए समरूपता का उपयोग करेंगे।
प्रत्येक मूल्य को भरने के लिए हम रैखिक अनुक्रमण का उपयोग करते हैं ( यह उत्तर , लंबाई -12 स्निपेट देखें)। इसका मतलब है कि मैट्रिक्स को एक्सेस करना जैसे कि इसका केवल एक ही आयाम था। 8 × 8 मैट्रिक्स के लिए, रैखिक सूचकांक का प्रत्येक मान निम्नानुसार एक प्रविष्टि को संदर्भित करता है:
1 9 57
2 10 58
3 11
4
5 ... ...
6
7 63
8 16 ... ... 64
तो, निम्न मान 4 से निचले-बाएँ प्रविष्टि को असाइन करता है:
K % Push 4
8 % Push 8
( % Assign 4 to the entry with linear index 8
मान 3 के लिए कोड समान है। इस मामले में सूचकांक एक वेक्टर है, क्योंकि हमें कई प्रविष्टियाँ भरने की आवश्यकता है:
3 % Push 3
K % Push 4
23h % Push 23 and concatenate horizontally: [4 23]
32h % Push 32 and concatenate horizontally: [4 23 32]
( % Assign 4 to the entries specified by that vector
और 2 के लिए:
H % Push 2
14 % Push 14
( % Assign 2 to that entry
अब हमारे पास मैट्रिक्स है
4 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
3 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 2 0 0 0 2 0 0
0 0 3 0 0 0 3 0
4 0 0 3 0 0 0 5
ऊपरी आधा भरने के लिए हम समरूपता का फायदा उठाते हैं:
t! % Duplicate and transpose
XR % Keep the upper triangular part without the diagonal
+ % Add element-wise
चरण 2
स्टैक में अब चरण 1 से उत्पन्न 8 × 8 मैट्रिक्स शामिल है। इस मैट्रिक्स का विस्तार करने के लिए हम अनुक्रमण का उपयोग करते हैं, इस बार दो आयामों में।
8: % Push vector [1 2 ... 7 8]
7:P % Push vector [7 6 ... 1]
h % Concatenate horizontally: [1 2 ... 7 8 7 ... 2 1]. This will be the row index
t % Duplicate. This will be the column index
3$ % Specify that the next function will take 3 inputs
) % Index the 8×8 matrix with the two vectors. Gives a 15×15 matrix
चरण 3
स्टैक में अब चरण 2 से उत्पन्न 15 × 15 मैट्रिक्स है।
'DtdTX.' % Push this string
w % Swap the two elements in the stack. This brings the matrix to the top
) % Index the string with the matrix
X
और कैसे नहीं*
? : o