CJam, 31 27 bytes
O CJam é muito mais recente que esse desafio, portanto, essa resposta não é elegível para ser aceita. Este foi um pequeno desafio à noite de sábado, no entanto. ;)
8S*9,:)+9*9/2%{_W%1>+z}2*N*
Teste aqui.
A idéia é formar primeiro o quadrante superior esquerdo. Aqui está como isso funciona:
Primeiro, forme a string " 123456789"
usando 8S*9,:)+
. Esta cadeia tem 17 caracteres. Agora, repetimos a sequência 9 vezes e depois a dividimos em substrings de comprimento 9 com 9/
. A incompatibilidade entre 9 e 17 compensará todas as outras linhas um caractere à esquerda. Imprimindo cada substring em sua própria linha, obtemos:
1
23456789
12
3456789
123
456789
1234
56789
12345
6789
123456
789
1234567
89
12345678
9
123456789
Portanto, se simplesmente soltarmos todas as outras linhas (o que funciona convenientemente 2%
), obteremos um quadrante conforme desejado:
1
12
123
1234
12345
123456
1234567
12345678
123456789
Finalmente, espelhamos isso duas vezes, transpondo a grade no meio para garantir que as duas operações de espelhamento sigam eixos diferentes. O espelhamento em si é apenas
_ "Duplicate all rows.";
W% "Reverse their order.";
1> "Discard the first row (the centre row).";
+ "Add the other rows.";
Por fim, apenas juntamos todas as linhas com novas linhas, com N*
.