CJam, 31 27 байт
CJam намного новее, чем этот вызов, поэтому этот ответ не может быть принят. Это был аккуратный маленький субботний вечер, хотя. ;)
8S*9,:)+9*9/2%{_W%1>+z}2*N*
Проверьте это здесь.
Идея состоит в том, чтобы сначала сформировать верхний левый квадрант. Вот как это работает:
Сначала сформируйте строку " 123456789"
, используя 8S*9,:)+
. Эта строка длиной 17 символов. Теперь мы повторяем строку 9 раз, а затем разбиваем ее на подстроки длиной 9 с 9/
. Несоответствие между 9 и 17 сместит каждую строку на один символ влево. Распечатав каждую подстроку в отдельной строке, мы получим:
1
23456789
12
3456789
123
456789
1234
56789
12345
6789
123456
789
1234567
89
12345678
9
123456789
Так что, если мы просто отбрасываем все остальные строки (что удобно работает 2%
), мы получаем один квадрант по желанию:
1
12
123
1234
12345
123456
1234567
12345678
123456789
Наконец, мы отражаем это дважды, переставляя сетку между ними, чтобы гарантировать, что две операции зеркального отображения идут вдоль разных осей. Само зеркалирование просто
_ "Duplicate all rows.";
W% "Reverse their order.";
1> "Discard the first row (the centre row).";
+ "Add the other rows.";
Наконец, мы просто соединяем все строки с помощью новых строк, с N*
.