MATL , 30 28 27 байт
t:P"@:s:@/Xk&+@+8MPt&(]30+c
Спробуйте в Інтернеті!
Особливості бонусу:
Для 26 байт наступна модифікована версія дає графічний вихід :
t:P"@:s:@/Xk&+@+8MPt&(]1YG
Спробуйте в MATL Online!
Зображення просить певного кольору , і воно коштує лише 7 байт:
t:P"@:s:@/Xk&+@+8MPt&(]1YG59Y02ZG
Спробуйте в MATL Online!
Або скористайтеся довшою версією (37 байт), щоб побачити, як поступово будується матриця символів :
t:P"@:s:@/Xk&+@+8MPt&(t30+cD9&Xx]30+c
Спробуйте в MATL Online!
Приклади виходів
Для введення 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