MATL , 30 28 27 bayt
t:P"@:s:@/Xk&+@+8MPt&(]30+c
Çevrimiçi deneyin!
Bonus özellikler:
İçin 26 bayt , aşağıdaki değiştirilmiş versiyonu üretir grafik çıktısı :
t:P"@:s:@/Xk&+@+8MPt&(]1YG
MATL Online'da deneyin !
Görüntü biraz renk için yalvarıyor ve yalnızca 7 bayta mal oluyor:
t:P"@:s:@/Xk&+@+8MPt&(]1YG59Y02ZG
MATL Online'da deneyin !
Veya karakter matrisinin aşamalı olarak nasıl oluşturulduğunu görmek için daha uzun bir sürüm (37 bayt) kullanın :
t:P"@:s:@/Xk&+@+8MPt&(t30+cD9&Xx]30+c
MATL Online'da deneyin !
Örnek çıktılar
Giriş için 8, aşağıda temel sürüm, grafik çıktı ve renkli grafik çıktı gösterilmektedir.



açıklama
Genel prosedür
Sayısal bir matris, girişin Nolduğu adımlarla dıştan iç katmanlara oluşturulur N. Her adım önceki matrisin iç (sol üst) kısmının üzerine yazar. Sonunda, elde edilen matristeki sayılar karakter olarak değiştirilir.
Örnek
Giriş 4için ilk matris
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
İkinci adım olarak, matris
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
ikincisinin üst yarısına yazılır. Sonra aynı ile yapılır
6 5 5
5 4 4
5 4 4
ve sonunda
3
Elde edilen matris
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
Son olarak, 30her girişe eklenir ve sonuçta elde edilen sayılar kod noktaları olarak yorumlanır ve karakterlere dönüştürülür (böylece başlar 33, buna karşılık gelir !).
Ara matrislerin inşaatı
Girişi için N, değerlerini düşürebilirler kgelen Netmek 1. Her biri için k, gelen tamsayılar bir vektör 1ile k*(k+1)oluşturulur, ve daha sonra her bir giriş bölünür kve yuvarlanır. Örnek olarak, bunun için k=4( kson hariç hariç tüm blokların büyüklüğü vardır ):
1 1 1 1 2 2 2 2 3 3
için ise k=3sonuç (tüm bloklar boyutuna sahip olacaktır k):
1 1 1 2 2 2
Bu vektör, yayınlanmış olarak eleman şeklinde, kendisinin aktarılmış bir kopyasına eklenir; ve sonra kher girişe eklenir. Bunun için k=4verir
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
Bu, yatay ve dikey olarak çevrilmesi dışında yukarıda gösterilen ara matrislerden biridir. Geriye kalan tek şey, bu matrisi çevirip şimdiye kadar "birikmiş" matrisin sol üst köşesine yazmak ve ilk ( k=N) basamağı için boş bir matrise başlatılması .
kod
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