Data update
This commit is contained in:
parent
0df55f9f24
commit
aec8ed51b6
1045 changed files with 18889 additions and 2777 deletions
54
Task/Random-Latin-squares/EasyLang/random-latin-squares.easy
Normal file
54
Task/Random-Latin-squares/EasyLang/random-latin-squares.easy
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
proc shuffle . a[] .
|
||||
for i = len a[] downto 2
|
||||
r = randint i
|
||||
swap a[r] a[i]
|
||||
.
|
||||
.
|
||||
proc prsquare . lat[][] .
|
||||
n = len lat[][]
|
||||
for i to n
|
||||
for j to n
|
||||
write lat[i][j] & " "
|
||||
.
|
||||
print ""
|
||||
.
|
||||
print ""
|
||||
.
|
||||
proc square n . .
|
||||
for i to n
|
||||
lat[][] &= [ ]
|
||||
for j to n
|
||||
lat[i][] &= j
|
||||
.
|
||||
.
|
||||
shuffle lat[1][]
|
||||
for i = 2 to n - 1
|
||||
repeat
|
||||
shuffle lat[i][]
|
||||
for k to i - 1
|
||||
for j to n
|
||||
if lat[k][j] = lat[i][j]
|
||||
break 2
|
||||
.
|
||||
.
|
||||
.
|
||||
until k = i
|
||||
.
|
||||
.
|
||||
len used0[] n
|
||||
for j to n
|
||||
used[] = used0[]
|
||||
for i to n - 1
|
||||
used[lat[i][j]] = 1
|
||||
.
|
||||
for k to n
|
||||
if used[k] = 0
|
||||
lat[n][j] = k
|
||||
break 1
|
||||
.
|
||||
.
|
||||
.
|
||||
prsquare lat[][]
|
||||
.
|
||||
square 5
|
||||
square 5
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
Randomize Timer
|
||||
|
||||
Sub printSquare(latin() As Integer, n As Integer)
|
||||
For i As Integer = 0 To n - 1
|
||||
Print "[";
|
||||
For j As Integer = 0 To n - 1
|
||||
Print latin(i, j); ",";
|
||||
Next j
|
||||
Print Chr(8); " ]"
|
||||
Next i
|
||||
Print
|
||||
End Sub
|
||||
|
||||
Sub latinSquare(n As Integer)
|
||||
Dim As Integer i, j, k
|
||||
|
||||
If n <= 0 Then
|
||||
Print "[]"
|
||||
Exit Sub
|
||||
End If
|
||||
Dim latin(n - 1, n - 1) As Integer
|
||||
For i = 0 To n - 1
|
||||
For j = 0 To n - 1
|
||||
latin(i, j) = j
|
||||
Next j
|
||||
Next i
|
||||
|
||||
' first row
|
||||
For i = 0 To n - 1
|
||||
Dim j As Integer = Int(Rnd * n)
|
||||
Swap latin(0, i), latin(0, j)
|
||||
Next i
|
||||
|
||||
' middle row(s)
|
||||
For i = 1 To n - 2
|
||||
Dim shuffled As Integer = 0
|
||||
While shuffled = 0
|
||||
For j = 0 To n - 1
|
||||
Dim k As Integer = Int(Rnd * n)
|
||||
Swap latin(i, j), latin(i, k)
|
||||
Next j
|
||||
shuffled = 1
|
||||
For k As Integer = 0 To i - 1
|
||||
For j = 0 To n - 1
|
||||
If latin(k, j) = latin(i, j) Then
|
||||
shuffled = 0
|
||||
Exit For
|
||||
End If
|
||||
Next j
|
||||
If shuffled = 0 Then Exit For
|
||||
Next k
|
||||
Wend
|
||||
Next i
|
||||
|
||||
' last row
|
||||
For j = 0 To n - 1
|
||||
Dim used(n - 1) As Integer
|
||||
For i = 0 To n - 2
|
||||
used(latin(i, j)) = 1
|
||||
Next i
|
||||
For k = 0 To n - 1
|
||||
If used(k) = 0 Then
|
||||
latin(n - 1, j) = k
|
||||
Exit For
|
||||
End If
|
||||
Next k
|
||||
Next j
|
||||
printSquare(latin(), n)
|
||||
End Sub
|
||||
|
||||
latinSquare(5)
|
||||
latinSquare(5)
|
||||
latinSquare(10) ' for good measure
|
||||
|
||||
Sleep
|
||||
Loading…
Add table
Add a link
Reference in a new issue