CJam, 31 27 byte
CJam è molto più recente di questa sfida, quindi questa risposta non può essere accettata. Questa è stata una bella sfida sabato sera, comunque. ;)
8S*9,:)+9*9/2%{_W%1>+z}2*N*
Provalo qui.
L'idea è di formare prima il quadrante in alto a sinistra. Ecco come funziona:
Innanzitutto, forma la stringa " 123456789"
, usando 8S*9,:)+
. Questa stringa è lunga 17 caratteri. Ora ripetiamo la stringa 9 volte e poi la dividiamo in sottostringhe di lunghezza 9 con 9/
. La mancata corrispondenza tra 9 e 17 compenserà ogni altra riga di un carattere a sinistra. Stampando ogni sottostringa sulla sua stessa linea otteniamo:
1
23456789
12
3456789
123
456789
1234
56789
12345
6789
123456
789
1234567
89
12345678
9
123456789
Quindi se lasciamo cadere ogni altra riga (che funziona convenientemente facendo 2%
), otteniamo un quadrante come desiderato:
1
12
123
1234
12345
123456
1234567
12345678
123456789
Infine, eseguiamo il mirroring due volte, trasponendo la griglia in mezzo per garantire che le due operazioni di mirroring passino lungo assi diversi. Il mirroring stesso è giusto
_ "Duplicate all rows.";
W% "Reverse their order.";
1> "Discard the first row (the centre row).";
+ "Add the other rows.";
Infine, uniamo tutte le linee con le nuove linee, con N*
.