Um quadrado latino é um quadrado que não tenha repetido em símbolos X ou Y colunas . Por exemplo:
ABCD
DABC
CDAB
BCDA
é um desses quadrados. Observe como cada coluna e linha contém uma permutação das mesmas 4 letras.
No entanto, nosso quadrado latino tem um problema: se eu girasse a segunda linha ( DABC
) 1 para a esquerda, terminaria com ABCD
, que é idêntico à permutação acima dela. Se for impossível girar uma coluna / linha e obter outra coluna / linha, consideraremos o quadrado como seguro para rotação .
Por exemplo:
ABCD
BDAC
CADB
DCBA
é rotação segura. A grade possui as seguintes propriedades:
- O ponto [0, N] usa o enésimo símbolo
- Os pontos [0, N] e [N, 0] são sempre o mesmo símbolo . (Gostaria de dizer também que [x, y] e [y, x] também são sempre a mesma letra, mas não posso provar)
Sua tarefa é imprimir um quadrado latino seguro para rotação, quando for aprovado com N. Não me importo se você imprimir letras, números, uma lista ou uma matriz 2D. Se você usar números, a coluna e a linha superiores deverão estar 0,1,2,3,...
(nessa ordem). Se você usar letras, deve serA,B,C,D,....
Por exemplo, se sua entrada foi 4, você deve imprimir:
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
Não há quadrados latinos seguros para rotação com tamanho menor que 4. Não me importo com o que seu programa faz se N for menor que 4. Para os curiosos, o número de quadrados seguros para rotação é (começando em 4): 2,5,5906,(too long to calculate)
Este é um código-golfe , então tente fazer as respostas o mais curtas possível no seu idioma favorito!
1,2,3,...
?
N
devido à qualidade insuficiente do número aleatório?)