এমএটিএল , 30 28 27 বাইট
t:P"@:s:@/Xk&+@+8MPt&(]30+c
এটি অনলাইন চেষ্টা করুন!
বোনাস বৈশিষ্ট্য:
জন্য 26 বাইট , নিম্নলিখিত পরিমার্জিত সংস্করণ উত্পাদন করে গ্রাফিকাল আউটপুট :
t:P"@:s:@/Xk&+@+8MPt&(]1YG
এমএটিএল অনলাইন এ চেষ্টা করুন !
চিত্রটি কিছু রঙের জন্য ভিক্ষা করছে , এবং এটির জন্য কেবল 7 বাইট খরচ রয়েছে:
t:P"@:s:@/Xk&+@+8MPt&(]1YG59Y02ZG
এমএটিএল অনলাইন এ চেষ্টা করুন !
অথবা ম্যাট্রিক্স অক্ষরটি কীভাবে ধীরে ধীরে নির্মিত হয় তা দেখতে একটি দীর্ঘ সংস্করণ (37 বাইট) ব্যবহার করুন :
t:P"@:s:@/Xk&+@+8MPt&(t30+cD9&Xx]30+c
এমএটিএল অনলাইন এ চেষ্টা করুন !
উদাহরণ আউটপুট
ইনপুটটির জন্য 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