blob: fa9bd5b2a96182a8063a78f4d6e076055c1dc2bb [file] [log] [blame]
-- $Id: matrix.lua,v 1.2 2004-07-04 07:29:51 bfulgham Exp $
-- http://shootout.alioth.debian.org/
-- with help from Roberto Ierusalimschy
local n = tonumber((arg and arg[1]) or 1)
local size = 30
function mkmatrix(rows, cols)
local count = 1
local mx = {}
for i=1,rows do
local row = {}
for j=1,cols do
row[j] = count
count = count + 1
end
mx[i] = row
end
return(mx)
end
function mmult(rows, cols, m1, m2)
local m3 = {}
for i=1,rows do
local m3i = {}
m3[i] = m3i
local m1i = m1[i] -- "cache" m1[i]
for j=1,cols do
local rowj = 0
for k=1,cols do
rowj = rowj + m1i[k] * m2[k][j]
end
m3i[j] = rowj
end
end
return(m3)
end
local m1 = mkmatrix(size, size)
local m2 = mkmatrix(size, size)
for i=1,n do
mm = mmult(size, size, m1, m2)
end
io.write(string.format("%d %d %d %d\n", mm[1][1], mm[3][4], mm[4][3], mm[5][5]))