1#!/usr/bin/ruby
2# -*- mode: ruby -*-
3# $Id: matrix-ruby.code,v 1.4 2004/11/13 07:42:14 bfulgham Exp $
4# http://www.bagley.org/~doug/shootout/
5
6n = 60 #Integer(ARGV.shift || 1)
7
8size = 40
9
10def mkmatrix(rows, cols)
11    count = 1
12    mx = Array.new(rows)
13    (0 .. (rows - 1)).each do |bi|
14        row = Array.new(cols, 0)
15        (0 .. (cols - 1)).each do |j|
16            row[j] = count
17            count += 1
18        end
19        mx[bi] = row
20    end
21    mx
22end
23
24def mmult(rows, cols, m1, m2)
25    m3 = Array.new(rows)
26    (0 .. (rows - 1)).each do |bi|
27        row = Array.new(cols, 0)
28        (0 .. (cols - 1)).each do |j|
29            val = 0
30            (0 .. (cols - 1)).each do |k|
31                val += m1.at(bi).at(k) * m2.at(k).at(j)
32            end
33            row[j] = val
34        end
35        m3[bi] = row
36    end
37    m3
38end
39
40m1 = mkmatrix(size, size)
41m2 = mkmatrix(size, size)
42mm = Array.new
43n.times do
44    mm = mmult(size, size, m1, m2)
45end
46# puts "#{mm[0][0]} #{mm[2][3]} #{mm[3][2]} #{mm[4][4]}"
47
48
49