Ein lateinisches Quadrat ist ein Quadrat, das weder in der X- noch in der Y-Spalte wiederholte Symbole enthält . Beispielsweise:
ABCD
DABC
CDAB
BCDA
ist ein solches Quadrat. Beachten Sie, dass jede Spalte und Zeile eine Permutation mit den gleichen 4 Buchstaben enthält.
Unser lateinisches Quadrat hat jedoch ein Problem: Wenn ich die zweite Zeile ( DABC
) 1 nach links drehen würde, hätte ich das Ergebnis ABCD
, das mit der darüber liegenden Permutation identisch ist. Wenn es unmöglich jede 1 Spalte / Zeile zu drehen , und eine weitere Spalte / Zeile zu erhalten, dann betrachten wir das Quadrat sein Rotation sicher .
Beispielsweise:
ABCD
BDAC
CADB
DCBA
ist rotationssicher. Das Raster hat folgende Eigenschaften:
- Punkt [0, N] verwendet das N-te Symbol
- Punkt [0, N] und [N, 0] sind immer dasselbe Symbol . (Ich möchte auch sagen, dass [x, y] und [y, x] immer der gleiche Buchstabe sind, aber ich kann es nicht beweisen.)
Ihre Aufgabe ist es, 1 rotationssicheres lateinisches Quadrat bei Übergabe von N auszudrucken. Es ist mir egal, ob Sie Buchstaben, Zahlen, eine Liste oder ein 2D-Array ausgeben. Wenn Sie Zahlen verwenden, müssen die oberste Spalte und Zeile 0,1,2,3,...
(in dieser Reihenfolge) sein. Wenn Sie Buchstaben verwenden, muss es seinA,B,C,D,....
Wenn Ihre Eingabe beispielsweise 4 war, sollten Sie entweder Folgendes drucken:
0,1,2,3 0,1,2,3
1,3,0,2 or 1,0,3,2
2,0,3,1 2,3,1,0
3,2,1,0 3,2,0,1
Es gibt keine rotationssicheren lateinischen Quadrate mit einer Größe von weniger als 4. Es ist mir egal, was Ihr Programm tut, wenn N kleiner als 4 ist. Für die Neugierigen ist die Anzahl der rotationssicheren Quadrate (beginnend bei 4): 2,5,5906,(too long to calculate)
Dies ist ein Code-Golf , also versuchen Sie, die Antworten so kurz wie möglich in Ihrer Lieblingssprache zu halten!
1,2,3,...
?
N
Qualität der Zufallszahlen nicht ausreicht?)