Post by bplus on Mar 25, 2022 18:53:55 GMT -5
'_Title "Random Latin Squares - Rosetta Code" ' b+ 2022-03-25
' ref http://rosettacode.org/wiki/Random_Latin_squares
Dim g(0, 0)
Print "As required by RC:"
For test = 1 To 2
n = 5
call RandomLatinSquare n
call displayLatinSquare n
Next
Print "Showing off:"
For n = 2 To 16
call RandomLatinSquare n
call displayLatinSquare n
Next
Sub RandomLatinSquare n
Dim a(n - 1), b(n - 1)
For i = 0 To n - 1
a(i) = i: b(i) = i
Next
For i = n - 1 To 1 Step -1
r = int(rnd(0)*(i + 1))
t = a(i)
a(i) = a(r)
a(r) = t
r = int(rnd(0)*(i + 1))
t = b(i)
b(i) = b(r)
b(r) = t
Next
Dim g(n - 1, n - 1)
For i = 0 To n - 1
For j = 0 To n - 1
g(j, i) = (a(j) + b(i)) Mod n
Next
Next
End Sub
Function pad$ (n, nSpaces)
pad$ = Right$(Space$(nSpaces) + Str$(n), nSpaces) ' EDIT: _trim$ not needed for JB/LB, surprising it still worked!?
End Function
Sub displayLatinSquare n
For i = 0 To n - 1
For j = 0 To n - 1
If n < 10 Then Print pad$(g(j, i), 2); Else Print pad$(g(j, i), 3);
Next
Print
Next
Print
End Sub
Sample Output:
As required by RC:
1 2 3 0 4
4 0 1 3 2
0 1 2 4 3
2 3 4 1 0
3 4 0 2 1
3 0 4 1 2
4 1 0 2 3
0 2 1 3 4
2 4 3 0 1
1 3 2 4 0
Showing off:
1 0
0 1
2 1 0
0 2 1
1 0 2
2 3 0 1
0 1 2 3
3 0 1 2
1 2 3 0
2 4 0 3 1
1 3 4 2 0
4 1 2 0 3
3 0 1 4 2
0 2 3 1 4
0 1 3 2 4 5
4 5 1 0 2 3
2 3 5 4 0 1
1 2 4 3 5 0
5 0 2 1 3 4
3 4 0 5 1 2
6 5 1 3 2 0 4
1 0 3 5 4 2 6
4 3 6 1 0 5 2
2 1 4 6 5 3 0
5 4 0 2 1 6 3
3 2 5 0 6 4 1
0 6 2 4 3 1 5
4 0 3 7 1 5 2 6
1 5 0 4 6 2 7 3
3 7 2 6 0 4 1 5
6 2 5 1 3 7 4 0
0 4 7 3 5 1 6 2
2 6 1 5 7 3 0 4
7 3 6 2 4 0 5 1
5 1 4 0 2 6 3 7
5 7 1 6 0 4 8 2 3
6 8 2 7 1 5 0 3 4
7 0 3 8 2 6 1 4 5
2 4 7 3 6 1 5 8 0
4 6 0 5 8 3 7 1 2
0 2 5 1 4 8 3 6 7
1 3 6 2 5 0 4 7 8
3 5 8 4 7 2 6 0 1
8 1 4 0 3 7 2 5 6
1 3 5 4 6 9 7 0 8 2
2 4 6 5 7 0 8 1 9 3
0 2 4 3 5 8 6 9 7 1
9 1 3 2 4 7 5 8 6 0
8 0 2 1 3 6 4 7 5 9
5 7 9 8 0 3 1 4 2 6
4 6 8 7 9 2 0 3 1 5
7 9 1 0 2 5 3 6 4 8
6 8 0 9 1 4 2 5 3 7
3 5 7 6 8 1 9 2 0 4
2 1 6 5 7 8 9 10 4 3 0
4 3 8 7 9 10 0 1 6 5 2
10 9 3 2 4 5 6 7 1 0 8
3 2 7 6 8 9 10 0 5 4 1
7 6 0 10 1 2 3 4 9 8 5
5 4 9 8 10 0 1 2 7 6 3
0 10 4 3 5 6 7 8 2 1 9
6 5 10 9 0 1 2 3 8 7 4
9 8 2 1 3 4 5 6 0 10 7
1 0 5 4 6 7 8 9 3 2 10
8 7 1 0 2 3 4 5 10 9 6
9 3 5 11 1 0 4 7 8 2 10 6
4 10 0 6 8 7 11 2 3 9 5 1
1 7 9 3 5 4 8 11 0 6 2 10
11 5 7 1 3 2 6 9 10 4 0 8
7 1 3 9 11 10 2 5 6 0 8 4
2 8 10 4 6 5 9 0 1 7 3 11
5 11 1 7 9 8 0 3 4 10 6 2
0 6 8 2 4 3 7 10 11 5 1 9
6 0 2 8 10 9 1 4 5 11 7 3
3 9 11 5 7 6 10 1 2 8 4 0
10 4 6 0 2 1 5 8 9 3 11 7
8 2 4 10 0 11 3 6 7 1 9 5
11 1 5 3 10 7 12 6 4 2 9 8 0
8 11 2 0 7 4 9 3 1 12 6 5 10
2 5 9 7 1 11 3 10 8 6 0 12 4
7 10 1 12 6 3 8 2 0 11 5 4 9
3 6 10 8 2 12 4 11 9 7 1 0 5
9 12 3 1 8 5 10 4 2 0 7 6 11
12 2 6 4 11 8 0 7 5 3 10 9 1
6 9 0 11 5 2 7 1 12 10 4 3 8
5 8 12 10 4 1 6 0 11 9 3 2 7
4 7 11 9 3 0 5 12 10 8 2 1 6
0 3 7 5 12 9 1 8 6 4 11 10 2
1 4 8 6 0 10 2 9 7 5 12 11 3
10 0 4 2 9 6 11 5 3 1 8 7 12
11 3 0 6 12 8 4 10 1 9 5 7 2 13
0 6 3 9 1 11 7 13 4 12 8 10 5 2
4 10 7 13 5 1 11 3 8 2 12 0 9 6
12 4 1 7 13 9 5 11 2 10 6 8 3 0
13 5 2 8 0 10 6 12 3 11 7 9 4 1
6 12 9 1 7 3 13 5 10 4 0 2 11 8
5 11 8 0 6 2 12 4 9 3 13 1 10 7
10 2 13 5 11 7 3 9 0 8 4 6 1 12
1 7 4 10 2 12 8 0 5 13 9 11 6 3
8 0 11 3 9 5 1 7 12 6 2 4 13 10
9 1 12 4 10 6 2 8 13 7 3 5 0 11
2 8 5 11 3 13 9 1 6 0 10 12 7 4
3 9 6 12 4 0 10 2 7 1 11 13 8 5
7 13 10 2 8 4 0 6 11 5 1 3 12 9
6 1 13 3 14 11 4 8 9 10 0 2 12 7 5
13 8 5 10 6 3 11 0 1 2 7 9 4 14 12
3 13 10 0 11 8 1 5 6 7 12 14 9 4 2
0 10 7 12 8 5 13 2 3 4 9 11 6 1 14
8 3 0 5 1 13 6 10 11 12 2 4 14 9 7
4 14 11 1 12 9 2 6 7 8 13 0 10 5 3
1 11 8 13 9 6 14 3 4 5 10 12 7 2 0
9 4 1 6 2 14 7 11 12 13 3 5 0 10 8
14 9 6 11 7 4 12 1 2 3 8 10 5 0 13
11 6 3 8 4 1 9 13 14 0 5 7 2 12 10
2 12 9 14 10 7 0 4 5 6 11 13 8 3 1
12 7 4 9 5 2 10 14 0 1 6 8 3 13 11
7 2 14 4 0 12 5 9 10 11 1 3 13 8 6
5 0 12 2 13 10 3 7 8 9 14 1 11 6 4
10 5 2 7 3 0 8 12 13 14 4 6 1 11 9
10 14 13 8 1 11 12 7 5 0 3 4 15 9 6 2
9 13 12 7 0 10 11 6 4 15 2 3 14 8 5 1
2 6 5 0 9 3 4 15 13 8 11 12 7 1 14 10
1 5 4 15 8 2 3 14 12 7 10 11 6 0 13 9
5 9 8 3 12 6 7 2 0 11 14 15 10 4 1 13
12 0 15 10 3 13 14 9 7 2 5 6 1 11 8 4
7 11 10 5 14 8 9 4 2 13 0 1 12 6 3 15
3 7 6 1 10 4 5 0 14 9 12 13 8 2 15 11
8 12 11 6 15 9 10 5 3 14 1 2 13 7 4 0
11 15 14 9 2 12 13 8 6 1 4 5 0 10 7 3
4 8 7 2 11 5 6 1 15 10 13 14 9 3 0 12
14 2 1 12 5 15 0 11 9 4 7 8 3 13 10 6
6 10 9 4 13 7 8 3 1 12 15 0 11 5 2 14
0 4 3 14 7 1 2 13 11 6 9 10 5 15 12 8
15 3 2 13 6 0 1 12 10 5 8 9 4 14 11 7
13 1 0 11 4 14 15 10 8 3 6 7 2 12 9 5
Hey no Basic versions in there yet!