const SIZE = 50;

fn new_mat(x, y) {
    let row = [];
    row.pad(y, 0.0);
    
    let matrix = [];
    matrix.pad(x, row);
    
    matrix
}

fn mat_gen() {
    const n = global::SIZE;
    const tmp = 1.0 / n / n;
    let m = new_mat(n, n);

    for i in range(0, n) {
        for j in range(0, n) {
            m[i][j] = tmp * (i - j) * (i + j);
        }
    }
    
    m
}

fn mat_mul(a, b) {
    let b2 = new_mat(a[0].len, b[0].len);
    
    for i in range(0, a[0].len) {
        for j in range(0, b[0].len) {
            b2[j][i] = b[i][j];
        }
    }

    let c = new_mat(a.len, b[0].len);

    for i in range(0, c.len) {
        for j in range(0, c[i].len) {
            c[i][j] = 0.0;
            
            for z in range(0, a[i].len) {
                c[i][j] += a[i][z] * b2[j][z];
            }
        }
    }

    c
}

const now = timestamp();

const a = mat_gen();
const b = mat_gen();
const c = mat_mul(a, b);

/*
for i in range(0, SIZE) {
    print(c[i]);
}
*/

print(`Finished. Run time = ${now.elapsed} seconds.`);