Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,73 @@
import std.array;
import std.random;
import std.stdio;
alias Matrix = int[][];
void latinSquare(int n) {
if (n <= 0) {
writeln("[]");
return;
}
Matrix latin = uninitializedArray!Matrix(n, n);
foreach (row; latin) {
for (int i = 0; i < n; i++) {
row[i] = i;
}
}
// first row
latin[0].randomShuffle;
// middle row(s)
for (int i = 1; i < n - 1; i++) {
bool shuffled = false;
shuffling:
while (!shuffled) {
latin[i].randomShuffle;
for (int k = 0; k < i; k++) {
for (int j = 0; j < n; j++) {
if (latin[k][j] == latin[i][j]) {
continue shuffling;
}
}
}
shuffled = true;
}
}
// last row
for (int j = 0; j < n; j++) {
bool[] used = uninitializedArray!(bool[])(n);
used[] = false;
for (int i = 0; i < n - 1; i++) {
used[latin[i][j]] = true;
}
for (int k = 0; k < n; k++) {
if (!used[k]) {
latin[n - 1][j] = k;
break;
}
}
}
printSquare(latin);
}
void printSquare(Matrix latin) {
foreach (row; latin) {
writeln(row);
}
}
void main() {
latinSquare(5);
writeln;
latinSquare(5);
writeln;
latinSquare(10);
}