Un quadrato latino è una piazza che non ha ripetuto simboli X o Y colonne . Per esempio:
ABCD
DABC
CDAB
BCDA
è uno di questi quadrati. Notare come ogni colonna e riga contenga una permutazione delle stesse 4 lettere.
Tuttavia, il nostro quadrato latino ha un problema: se dovessi ruotare la seconda fila ( DABC
) di 1 a sinistra, finirei con ABCD
, che è identico alla permutazione sopra di essa. Se è impossibile ruotare 1 colonna / riga e ottenere un'altra colonna / riga, allora consideriamo il quadrato sicuro dalla rotazione .
Per esempio:
ABCD
BDAC
CADB
DCBA
la rotazione è sicura. La griglia ha le seguenti proprietà:
- Il punto [0, N] utilizza l'ennesimo simbolo
- Il punto [0, N] e [N, 0] sono sempre lo stesso simbolo . (Vorrei anche dire che [x, y] e [y, x] sono sempre la stessa lettera, ma non posso provarlo)
Il tuo compito è quello di stampare 1 quadrato latino sicuro dalla rotazione, quando viene passato N. Non mi importa se hai prodotto lettere, numeri, un elenco o un array 2D. Se si utilizzano numeri, la colonna e la riga in alto devono essere 0,1,2,3,...
(in questo ordine). Se usi le lettere, allora deve essereA,B,C,D,....
Ad esempio, se l'input era 4, è necessario stampare:
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
Non ci sono quadrati latini a prova di rotazione di dimensioni inferiori a 4. Non mi interessa cosa fa il tuo programma se N è inferiore a 4. Per i curiosi, il numero di quadrati a prova di rotazione è (a partire da 4): 2,5,5906,(too long to calculate)
Questo è un codice-golf , quindi cerca di dare risposte il più brevi possibile nella tua lingua preferita!
1,2,3,...
?
N
causa dell'insufficiente qualità dei numeri casuali?)