#import std.int std.print
#def NUM_LINES: 6
#def NUM_TAB_SPACES: -1
predef function print_spaces: (int n, space:=' ');
predef function num_digits: int(int n);
predef function print_num: (int n, tab:=NUM_TAB_SPACES, space:=' ');
function print_pascal_tri: (int N, tab:=-1) {
if(N < 1) N = 1;
with(tri=new() int[N][N]);
for(i=0:N) {
tri[i][0] = 1;
tri[i][i] = 1;
}
for(i=1:N) {
for(j=1:i) tri[i][j] = tri[i-1][j] + tri[i-1][j-1];
}
if(tab < 1) tab = 1 + num_digits(tri[N-1][N/2]);
if(tab % 2 != 0) ++tab;
print();
for(i=0:N) {
print_spaces(((N-i-1)/2)*tab);
if(i%2==N%2) print_spaces(tab/2);
for(j=0:i+1) {
print_num(tri[i][j], tab:=tab);
}
print();
}
print();
}
print_pascal_tri(NUM_LINES, tab:=NUM_TAB_SPACES);
function print_spaces: (int n, space:=' ') {
for(i=0:n) printnoln(space);
}
function num_digits: int(int n) {
if(n == 0) return 1;
d = 0;
if(n < 0) {
++d;
n = - n;
}
while(n > 0) {
n /= 10;
++d;
}
return d;
}
function print_num: (int n, tab:=NUM_TAB_SPACES, space:=' ') {
d = num_digits(n);
print_spaces((tab-d)/2, space);
printnoln(n);
print_spaces(tab-(tab-d)/2-d, space);
}