Kwadrat łaciński jest kwadrat, który nie powtórzył symboli X lub Y kolumn . Na przykład:
ABCD
DABC
CDAB
BCDA
jest jednym z takich kwadratów. Zauważ, że każda kolumna i wiersz zawiera permutację tych samych 4 liter.
Jednak nasz kwadrat łaciński ma problem: gdybym obrócił drugi rząd ( DABC
) 1 w lewo, skończyłbym na tym ABCD
, co jest identyczne z permutacją nad nim. Jeśli nie można obrócić 1 kolumny / wiersza i uzyskać innej kolumny / wiersza, wówczas uważamy kwadrat za bezpieczny dla obrotu .
Na przykład:
ABCD
BDAC
CADB
DCBA
jest bezpieczny w obrocie. Siatka ma następujące właściwości:
- Punkt [0, N] używa N-tego symbolu
- Punkty [0, N] i [N, 0] są zawsze tym samym symbolem . (Chciałbym również powiedzieć, że [x, y] i [y, x] są również zawsze tą samą literą, ale nie mogę tego udowodnić)
Twoim zadaniem jest wydrukować 1 bezpieczny łaciński kwadrat po przejściu N. Nie dbam o to, czy wypiszesz litery, cyfry, listę lub tablicę 2D. Jeśli używasz liczb, górna kolumna i wiersz muszą być 0,1,2,3,...
(w tej kolejności). Jeśli używasz liter, to musi byćA,B,C,D,....
Na przykład, jeśli wprowadzono 4, należy wydrukować:
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
Nie ma bezpiecznych obrotów łacińskich kwadratów o rozmiarze mniejszym niż 4. Nie obchodzi mnie, co robi twój program, jeśli N jest mniejsze niż 4. Dla ciekawskich liczba bezpiecznych obrotów to (zaczynając od 4): 2,5,5906,(too long to calculate)
To jest golf golfowy , więc staraj się, aby odpowiedzi były jak najkrótsze w swoim ulubionym języku!
1,2,3,...
?
N
powodu wysokich wartości z powodu niewystarczającej jakości liczb losowych?)