MATL , 30 28 27 बाइट्स
t:P"@:s:@/Xk&+@+8MPt&(]30+c
इसे ऑनलाइन आज़माएं!
बोनस सुविधाओं:
के लिए 26 बाइट्स , निम्नलिखित संशोधित संस्करण का उत्पादन चित्रमय परिणाम :
t:P"@:s:@/Xk&+@+8MPt&(]1YG
MATL ऑनलाइन पर यह कोशिश करो !
छवि कुछ रंग के लिए भीख माँग रही है , और इसकी कीमत केवल 7 बाइट्स है:
t:P"@:s:@/Xk&+@+8MPt&(]1YG59Y02ZG
MATL ऑनलाइन पर यह कोशिश करो !
या वर्ण मैट्रिक्स को धीरे-धीरे कैसे बनाया जाए, यह देखने के लिए एक लंबे संस्करण (37 बाइट्स) का उपयोग करें :
t:P"@:s:@/Xk&+@+8MPt&(t30+cD9&Xx]30+c
MATL ऑनलाइन पर यह कोशिश करो !
उदाहरण आउटपुट
इनपुट के लिए 8, निम्नलिखित मूल संस्करण, ग्राफ़िकल आउटपुट और रंग ग्राफ़िकल आउटपुट दिखाता है।



व्याख्या
सामान्य प्रक्रिया
एक संख्यात्मक मैट्रिक्स बाहरी से आंतरिक परतों तक Nचरणों में बनाया गया है , जहां Nइनपुट है। प्रत्येक चरण पिछले मैट्रिक्स का एक आंतरिक (ऊपरी-बाएँ) भाग अधिलेखित कर देता है। अंत में, प्राप्त मैट्रिक्स में संख्याओं को वर्णों में बदल दिया जाता है।
उदाहरण
इनपुट के 4लिए पहला मैट्रिक्स है
10 10 9 9 9 9 8 8 8 8
10 10 9 9 9 9 8 8 8 8
9 9 8 8 8 8 7 7 7 7
9 9 8 8 8 8 7 7 7 7
9 9 8 8 8 8 7 7 7 7
9 9 8 8 8 8 7 7 7 7
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
दूसरे चरण के रूप में, मैट्रिक्स
7 7 7 6 6 6
7 7 7 6 6 6
7 7 7 6 6 6
6 6 6 5 5 5
6 6 6 5 5 5
6 6 6 5 5 5
उत्तरार्ध के ऊपरी आधे हिस्से में ओवरराइट किया गया है। फिर उसी के साथ किया जाता है
6 5 5
5 4 4
5 4 4
और अंत में
3
परिणामी मैट्रिक्स है
3 5 5 6 6 6 8 8 8 8
5 4 4 6 6 6 8 8 8 8
5 4 4 6 6 6 7 7 7 7
6 6 6 5 5 5 7 7 7 7
6 6 6 5 5 5 7 7 7 7
6 6 6 5 5 5 7 7 7 7
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
8 8 7 7 7 7 6 6 6 6
अंत में, 30प्रत्येक प्रविष्टि में जोड़ा जाता है और परिणामी संख्याओं को कोडपॉइंट के रूप में व्याख्या किया जाता है और वर्णों में परिवर्तित किया जाता है (इस प्रकार शुरू होता है 33, इसी के अनुरूप !)।
मध्यवर्ती मैट्रिस का निर्माण
इनपुट के लिए N, kसे मूल्यों को कम करने पर विचार Nकरें 1। प्रत्येक के लिए k, से पूर्णांकों का एक वेक्टर 1के लिए k*(k+1)उत्पन्न होता है, और उसके बाद प्रत्येक प्रविष्टि से विभाजित है kऔर को गिरफ्तार। एक उदाहरण के रूप में, k=4यह देता है (सभी ब्लॉकों kमें अंतिम को छोड़कर आकार है ):
1 1 1 1 2 2 2 2 3 3
जबकि k=3परिणाम के लिए (सभी ब्लॉकों का आकार होगा k):
1 1 1 2 2 2
यह सदिश जोड़ा गया है, तत्व-वार प्रसारण के साथ, स्वयं की एक प्रतिरूपित प्रतिलिपि के लिए; और फिर kप्रत्येक प्रविष्टि में जोड़ा जाता है। इसके लिए k=4देता है
6 6 6 6 7 7 7 7 8 8
6 6 6 6 7 7 7 7 8 8
6 6 6 6 7 7 7 7 8 8
6 6 6 6 7 7 7 7 8 8
7 7 7 7 8 8 8 8 9 9
7 7 7 7 8 8 8 8 9 9
7 7 7 7 8 8 8 8 9 9
7 7 7 7 8 8 8 8 9 9
8 8 8 8 9 9 9 9 10 10
8 8 8 8 9 9 9 9 10 10
यह ऊपर दिखाए गए मध्यवर्ती मैट्रिक्स में से एक है, सिवाय इसके कि यह क्षैतिज और लंबवत रूप से फ़्लिप किया जाता है। तो वह सब कुछ इस मैट्रिक्स को फ्लिप करने के लिए है और इसे "संचित" मैट्रिक्स के ऊपरी-बाएँ कोने में लिखें, जो पहले ( k=N) चरण के लिए एक खाली मैट्रिक्स के लिए आरंभ किया गया है ।
कोड
t % Implicitly input N. Duplicate. The first copy of N serves as the
% initial state of the "accumulated" matrix (size 1×1). This will be
% extended to size N*(N+1)/2 × N*(N+1)/2 in the first iteration
:P % Range and flip: generates vector [N, N-1, ..., 1]
" % For each k in that vector
@: % Push vector [1, 2, ..., k]
s % Sum of this vector. This gives 1+2+···+k = k*(k+1)/2
: % Range: gives vector [1, 2, ..., k*(k+1)/2]
@/ % Divide each entry by k
Xk % Round up
&+ % Add vector to itself transposed, element-wise with broadcast. Gives
% a square matrix of size k*(k+1)/2 × k*(k+1)/2
@+ % Add k to each entry of the this matrix. This is the flipped
% intermediate matrix
8M % Push vector [1, 2, ..., k*(k+1)/2] again
Pt % Flip and duplicate. The two resulting, equal vectors are the row and
% column indices where the generated matrix will be written. Note that
% flipping the indices has the same effect as flipping the matrix
% horizontally and vertically (but it's shorter)
&( % Write the (flipped) intermediate matrix into the upper-left
% corner of the accumulated matrix, as given by the two (flipped)
% index vectors
] % End
30+ % Add 30 to each entry of the final accumulated matrix
c % Convert to char. Implicitly display